Może jakiś pattern ?

0

Cześć, mam takie klasy

public class MyFactory {

    public FactoryObject factoryObject1(ObjectWithNeededData data){
        return new FactoryObject (
                new Cat(data), new Car(data), new Windows(data),
                new House(data), new Country(data), new Salary(data)
        );
    }


    public FactoryObject factoryObject2(ObjectWithNeededData data){
        return new FactoryObject (
                new Dog(data), new Plane(data), new Linux(data),
                new House(data), new Country(data), new Salary(data)
        );
}

--------------

public class FactoryObject {

    protected MyPetInterface myPetInterface;
    protected MyVehicleInterface myVehicleInterface ;
    protected MyOSInterface myOsInterface;
    protected MyHouseInterface ,myHouseInterface ;
    protected MyCountryInterface myCountryInterface ;
    protected MySalaryInterface mySalaryInterface ;
   
   ... konstruktor.

public FactoryObjectResult getFactoryObjectResult () {
        return doMyJob(new FactoryObjectResult());
    }

    private FactoryObjectResult doMyJob(FactoryObjectResult factoryObjectResult){
        factoryObjectResult = myPetInterface.modify(factoryObjectResult);
        factoryObjectResult = myVehicleInterface.modify(factoryObjectResult);
        factoryObjectResult = myOsInterface.modify(factoryObjectResult);
        factoryObjectResult = myHouseInterface.modify(factoryObjectResult);
        factoryObjectResult = myCountryInterface.modify(factoryObjectResult);
        factoryObjectResult = mySalaryInterface.modify(factoryObjectResult);
        return factoryObjectResult;
    }
}

oczywiście tych metod w MyFactory ma być więcej(około 50) i teraz muszę jeszcze zależnie od daty którą pobieram z ObjectWithNeededData wrzucić w konstruktorze FactoryObject wersje obiekty np: new Car_v2(data),new Car_v3(data),new Car_v4(data) i nie wiem czy ogólnie wybrałem dobrą drogę, problem polega na tym że zależnie od daty muszę wybrać odpowiednią wersje implementacji obiektu, czy dało by się to jakoś lepiej zrobić niż przez jakieś ify w każdej metodzie/odzielnej fasadzie, jest to kod który dopiero powstaje więc można go zmieniać

nazwy Interfejsów i implementacji wymyślałem, nie doszukiwał bym się w nich sensu, ogólnie odpowiedzialność jest mała ale wspólna bo taki MySalaryInterface korzysta z danych które już zostały zmodyfikowane przez np MyVehicleInterface

1

Usuń Object, Factory i Interface z nazw klas / interfejsów bo nie da się tego czytać.
Również FactoryObjectResult zwykle nie powinno mieć w nazwie Result (wyjątkiem są Rest Controller Response które są zawsze Response).

4

Opisz słownie co chcesz osiągnąć od strony biznesowej. TIP: Napisz to tak żeby Twoi rodzice mogli to zrozumieć.
Jeśli chcesz nauczyć się robić abstrakcję / interfejsy / clean code / clean architecuture to patrz linijkę wyżej - proszę nie twórz takich bytów.

0

No dobra, bardziej biznesowo to będzie tak:
Mam obliczyć cenę usług, usługa składa z kilku mniejszych usług, celem jest zwrot nie tylko ostatniej obliczonej kwoty, ale ogólnie która ile kosztowała oraz jakiś total, z czasem zmieniały się sposoby jak pomniejsze usługi były obliczane(w przyszłości też prawdopodobnie będą), i nie chodzi tu tylko o kwotę jakiś składowych, ale też jeżeli coś to teraz to liczymy trochę inaczej, wymogiem jest zachowanie pełnej kompatybilności wstecz

mam nadzieje że łatwiej teraz będzie zrozumieć

jak wy podeszlibyście do zadanego problemu ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1