2012-01-10 13 views
6

Mam pewne funkcje związane z przeliczaniem walut w moim projekcie Zend. Chciałbym skorzystać z funkcjonalności w kontrolerach i modelach. Czy istnieje najlepsza praktyka, w której można umieścić ten kod? A może fakt, że funkcjonalność w obu miejscach zastosowała wskaźnik, że być może powinienem ponownie przemyśleć strukturę projektu, aby nie było potrzebne w obu miejscach?Gdzie można umieścić kod wielokrotnego użytku dostępny dla kontrolerów i modeli

Odpowiedz

6

Myślę, że puryści twierdzą, że jeśli robisz przeliczenia walut w swoim kodzie kontrolnym, prawdopodobnie robisz coś nie tak, ponieważ tam naprawdę nie powinna być logika biznesowa. Czasami jednak względy praktyczne przeważają nad względami purystycznymi. Załóżmy, że jest to jeden z takich przypadków. :-)

Jeśli twoja klasa walutowa jest dość prostą klasą typu użyteczności, to chciałbym skłaniać się ku stworzeniu nowego katalogu pod "aplikacją" zwaną "utils", a następnie dodaniu tego katalogu do modułu ładującego zasoby w aplikacji bootstrap:

protected function _initResourceLoader() 
{ 
    $this->_resourceLoader->addResourceType('utility', 'utils', 'Utility'); 
} 

Następnie można utworzyć klasę o nazwie Application_Utility_Currency zapisany w pliku o nazwie Currency.php w tym katalogu i wywoływać metody statyczne, takie jak:

Application_Utilility_Currency::convert($from_currency, $to_currency, $amount); 

takie podejście byłoby szczególnie przydatne, jeśli yo Miałeś inne klasy użytkowe, które również szukały domu.

Jeśli jednak twoja klasa walutowa zawiera bogatszą funkcjonalność (np. Łączenie się z usługami zewnętrznymi w celu uzyskania danych o kursach wymiany itp.), To lepiej, aby IMO traktować je jako "usługę", a nie jako "narzędzie ". Moja definicja "modelu" jest dość luźna i obejmuje wszystkie usługi związane z danymi, niezależnie od tego, czy dane znajdują się w bazie danych aplikacji, czy gdzie indziej, więc jeśli klasa jest bardziej złożonej odmiany, to po prostu włożyłbym ją w inne modele.

+0

Dziękuję bardzo. Jak już wspomniałeś, istnieje również logika łączenia się z usługą zewnętrzną i pobierania nowych stawek, więc być może model jest najlepszy. Dobrze wiedzieć o funkcjonalności narzędzia, ponieważ jest to przydatne w innych miejscach. – user1140535

Powiązane problemy