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
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.
- 1. Gdzie umieścić wielokrotnego użytku metody dostępu przez kontrolerów w szynach
- 2. Jak indeksować i udostępniać kod wielokrotnego użytku?
- 3. Wielokrotnego użytku wielokąt
- 4. ASP> net MVC wielokrotnego użytku partials
- 5. Gdzie umieścić metody pomocnicze Ruby dla kontrolerów Rails?
- 6. Jak utworzyć i obsługiwać bibliotekę wielokrotnego użytku?
- 7. wielokrotnego użytku realizacja równych i hashcode
- 8. Jak uruchomić testy dla aplikacji wielokrotnego użytku django?
- 9. Komórka niestandardowa wielokrotnego użytku
- 10. Zdalne szyny modularne wielokrotnego użytku
- 11. Projektowanie akcji Redux i reduktorów dla komponentu wielokrotnego użytku React
- 12. kątowe - wielokrotnego użytku okna dialogowe
- 13. Gdzie jest obecnie dostępny kod źródłowy dla JUnit?
- 14. Komponenty wielokrotnego użytku w AngularJS
- 15. Jak można utworzyć bibliotekę wielokrotnego użytku w postaci modułów AMD?
- 16. Komórka prototypowa wielokrotnego użytku UITableView
- 17. Pisanie wielokrotnego użytku kodu C# dla stron ASP.NET
- 18. Elixir phoenix gdzie należy umieścić globalnych kontrolerów pomocników
- 19. Gdzie umieścić kod oczyszczający w aplikacji Flask?
- 20. Gdzie umieścić plik stałych dla Codeigniter (PHP)?
- 21. Django: Implementacja zagnieżdżonego, wielokrotnego użytku projektu komponentu
- 22. Gdzie umieścić cały kod JavaScript jQuery?
- 23. Gdzie umieścić kod jQuery specyficzny dla strony w Rails 4.1?
- 24. Gdzie umieścić swój kod Google Analytics
- 25. Jak zaimplementować funkcje wywołania zwrotnego wielokrotnego użytku
- 26. Wzór JS ajax wielokrotnego użytku (jquery)
- 27. Jquery obiecuje: Czy istnieje alternatywa wielokrotnego użytku?
- 28. Gdzie powinienem umieścić Fabryki i Usługi AngularJS?
- 29. Pisanie wielokrotnego użytku (parametryzowane) Metoda unittest.TestCase
- 30. Tworzenie komponentów wielokrotnego użytku za pomocą KnockoutJS
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