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.