Wpis z mikrobloga

Pany pytanie o interfejsy i dziedziczenie.
Czy jest sens zamieniać to na interfejsy (dependency injection - jeszcze tego nie ogarniam?) albo jakiś wzorzec np. builder/adapter?

Napisalem kiedys dla 1 klienta program, który pobiera z bazy dokumenty i wrzuca do XL'a.
Tak się składa, że muszę to przepisać pod inny system działający w oparciu o REST.
Skoro już jestem mądrzejszy o te 1-2 lata chciałem to zrobić trochę lepiej/ładniej.

Teraz to wygląda tak, że jest jakiś dokument bazowy i z niego dziedziczą np. dok zakupowy/ dok sprzedażowy/ dok magazynowy itp. (oprócz tego każdy dokument w sobie może mieć kilka typów np. faktura/paragon/korekta - to już jest oparte na ifach w obrębie danego dokumentu).
Każdy taki podtyp jest enumem przekazywanym w parametrze a nastepnie obsłużony if'ami w konkretnych metodach jeśli są różnice.
Każdy dokument ma podobne bloki w stylu.
Kod z lepszym formatowaniem
Pastebin

public class DokSprzedazowy : Dokument
{
private void ZalozDokument(KlasaZDanymiDokumentu dokument, EnumTypDok typDokumentu)
{
WeryfikacjaDanych(dokument, typDokumentu); //EnumTypDok = np. paragon / korekta
Nagłówek(dokument, typDokumentu);
Pozycje(dokument, typDokumentu); // mogą być dokumenty, które nie mają pozycji tylko sam nagłówek
ZalozWXL();
}
}


private void WeryfikacjaDanych(KlasaZDanymiDokumentu Dokument, EnumTypDok TypDok)
{
if(TypDok == paragon || TypDok == fakturaSprzed)
{
//sprawdz cos
}
else
{
//sprawdz cos innego
}
}

Ogólnie to działa dobrze, chociaż sporo kodu jest powielone, ale to co się dało jest tez wyciągnięte do bazowej klasy Dokument z tym, że w środku jest dużo if'ów na różne typy dokumentów.
#csharp
  • 9
@obieq: nie wiem co to XL, ale w NoSQL, zawsze robie tak że w bazie mam pole typ dokumentu i przy wczytywaniu służy mi do stworzenia odpowiedniej klasy obiektu, przy zapisie natomiast odpowiednia klasa zapisuje się z odpowiednim typem. Wiec cała aplikacja działa już na odpowiednich klasach beż żadnych ifów. Jedynie przy wczytywaniu z bazy jest jeden switch
@Fallinghammer: ok doczytam, myslalem ze builder na zasadzie ze kazdy dokument ma swojego buildera np.
zrobweryfikacje/ dodajnaglowek / (opcjonalnie w niektorych) dodaj pozycje
zobacze jakby Factory mozna dostosowac