Piszę kalkulator do obliczeń danych finansowych na podstawie różnych kryteriów np.: miejscowości, rodzaje zatrudnienia, wielkośc firmy itp...
Mam taka strukturę
src/myBundle/SomeCalculator: |-Calculator |- Calculator.php - interfejs z metodą compute(); |- CalculatorFactory.php - fabryka do kalkulatorów |- CityCalculator.php - kalkulator do kryterium miejscowości |- EmploymentTypeCalculator.php - kalkulator do kryterium rodzaj zatrudnienia |- .... - kalkulatory wielu innych kryteriów. |-CalculatorService.php- serwis który jest definiowany w symfony i defacto ta klasa jest wykorzystywana w kontrolerze.
CalculatorService posiada metodę compute() która poprzez fabrykę tworzy klasy kalkulatorów dla kolejnych kryteriów i po kolei je uruchamia.
i teraz mam problem, niektóre kryteria wymagają słowników pobranych z BD, np miejscowości, bo jest ich kilka tysięcy,
niektóre natomiast mają słowniki zahardcodowane w kodzie, bo słownik rodzajów zatrudnienia to raptem 4 elementowa tablica.
I jak przekazywać te słowniki?
Zrobić w interfejsie metodę setDictionary albo wstrzykiwać jako zależnośc konstruktora?
Myślałem, żeby te klasy które mają słowniki wklepane w kodzie trzymały je w sobie, ale znowu wprowadzi to zamęt bo część słowników będzie przekazywana a częśc zakodowana w klasach.
Mam jeszcze jedno rozwiązanie, stworzyć osobny serwis np SomeCalculatorDictionaryResolver z metodą getDictionary(TYPE): array;
Co wybyście w takiej sytuacji zrobili?