Hej,
nie jestem do końca pewien w jaki sposób powinienem zaprojektować klasy w moim problemie.
Jest pole uprawne (Farmland
), na którym można wykonywać wiele czynności/operacje (Operation
). I teraz sprawa trochę się komplikuje, są dwie możliwe operacje: MechanicalOperation
, która nie używa żadnych dodatkowych materiałów oraz MaterialOperation
(która do wykonania zużywa jakieś tam materiały, zawiera w sobie listę zużytych materiałów). Dodatkowo dochodzą strategie obliczania kosztów. Każda czynność Operation
ma swój koszt, a w przypadku gdy jest to MaterialOperation
dodatkowo musi zostać obliczony koszt zużytych materiałów.
Obecnie mam to zaimplementowane w ten sposób, że Operation
jest klasą abstrakcyjną z paroma zaimplementowanymi metodami biznesowymi wspólnymi dla wszystkich operacji. Następnie MechanicalOperation
oraz MaterialOperation
dziedziczą po Operation
. MechanicalOperation
wprowadza swoje metody biznesowe (m. in. obliczanie kosztów materiałów na podstawie dostarczonej strategii). Co istotne MechanicalOperation
nie może być czynnością, czynnością jest np pryskanie SprayingOperation
, sianie SeedingOperation
, tutaj jest przestawiany tylko jeden typ wyliczeniowy type
. Więc w związku z tym również powinna być klasą abstrakcyjną? W jaki sposób ma być to utrwalone w bazie danych? Wszystko w jednej tabeli i wykorzystać @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
w encji Operation
? Czy rozdzielić to na operację materiałowe MaterialOperation
i mechaniczne MechanicalOperation
? Nie wiem jak zaprojektować to aby było elegancko i dobrze. Moje encje domenowe nie są anemiczne.