Wierzę, że większość kontenerów IoC umożliwia podłączanie zależności za pomocą pliku konfiguracyjnego XML. Jakie są zalety i zalety korzystania z pliku konfiguracyjnego a rejestrowania zależności w kodzie?Jaki jest preferowany sposób łączenia zależności za pomocą kontenera IoC?
Odpowiedz
Te plusy i minusy są oparte na mojej pracy ze sprężyną. Może się nieznacznie różnić w przypadku innych pojemników.
XML
pro
- elastyczny
- mocniejszy niż adnotacje w niektórych obszarach
- bardzo wyraźny modelowanie zależności od swoich klas
con
- verbose
- trudności z refactoring
- przełączania między kilkoma plikami
Adnotacje
pro
- mniej plik przełączania
- automatycznej konfiguracji dla prostych instalacji elektrycznych
- mniej gadatliwy niż xml
con
- więcej wdrażania dane specyficzne w kodzie (zazwyczaj można zastąpić ten z configs XML)
- xml jest almopst (?) Zawsze potrzebne, przynajmniej aby skonfigurować opartą na annonacji konfigurację, magia adnotacji może prowadzić do nieporozumień podczas wyszukiwania klasy, która jest używana jako zależność:
Kod
pro
- mogą skorzystać z silnie typowanych języków (np C#, Java)
- Niektóre kompilacji sprawdzanie (nie można sprawdzić statycznie zależności, chociaż)
- mogą skorzystać z DSL (np Binsor, Zaawansowany interfejs)
- mniej gadatliwe niż XML (np ty nie trzeba zawsze podawać cały zespół kwalifikowanej nazwy (.NET podczas rozmowy))
con
- okablowanie poprzez kod może prowadzić do skomplikowanych instalacji elektrycznych
- trudnych zależności od kontenera IOC w bazie kodu
Używam mieszanki XML + adnotacji. Niektóre rzeczy, szczególnie dotyczące dostępu do bazy danych, są zawsze konfigurowane przez xml, podczas gdy rzeczy takie jak kontrolery lub usługi są w większości konfigurowane za pomocą adnotacji w kodzie.
[Edycja: zapożyczyli kodu Mauschs pros]
Zakładam, że przez "rejestrowanie zależności w kodzie" rozumiesz "użyj nowego".
"Nowy" to niezwykle potężny schemat zastrzyków zależności. Pozwala na "wstrzykiwanie" swoich "zależności" w momencie tworzenia obiektu - czyli nie zapomnianych parametrów lub na wpół skonstruowanych obiektów.
Innym ważnym potencjalna korzyść jest to, że podczas korzystania z narzędzi Refaktoryzacja (powiedzmy w Resharper lub IntelliJ), rozmowy do nowej zmiany zbyt
W przeciwnym razie można korzystać z niektórych XML nonsens i byłaby z XSL.
tak - cokolwiek! miłośnicy wiosny. – time4tea
Przed udzieleniem odpowiedzi poinformuj się. Większość kontenerów oferuje alternatywne sposoby konfiguracji inne niż xml. Płynne interfejsy API mogą odkupić wygodę refaktoryzacji. Dodatkowo, kontenery to coś więcej niż tylko convencience: http://ayende.com/Blog/archive/2007/10/20/Dependency-Injection-doesnt-cut-it-anymore.aspx –
Uważam się za dość dobrze poinformowanego ten szczególny temat, dzięki za radę! Przeczytałem połączony artykuł i nadal nie widzę zainteresowania "ramowego". Szczerze mówiąc - wszystko w tym artykule brzmi dla mnie jak biedota. Jednak każdy na własną rękę. Możesz prowadzić konia ... – time4tea
XML plusy:
- można zmienić okablowanie i parametrów bez rekompilacji. Czasami jest miło mieć przy zmianie środowiska (np można przełączyć fałszywego nadawcę e-mail używany w dev do rzeczywistego nadawcy e-mail w produkcji)
Plusy Kod:
- mogą skorzystać z języki mocno napisane na klawiaturze (np. C#, Java)
- Niektóre sprawdzanie podczas kompilacji (nie może sprawdzić statycznie zależności).
- Refaktorowanie za pomocą standardowych narzędzi do refaktoryzacji.
- mogą skorzystać z DSL (np Binsor, Fluent interfejsów)
- mniej gadatliwe niż XML (np nie trzeba zawsze podawać cały zespół kwalifikowanej nazwy (podczas rozmowy .net))
zgadzam. Znalazłem pojemniki ioc, które dają mi bardzo niewiele, jednak bardzo łatwo mogą utrudniać coś. Potrafię rozwiązać większość problemów, z jakimi mam do czynienia po prostu używając mojego wybranego języka programowania, który okazał się łatwiejszy w utrzymaniu i łatwiejszy w nawigacji.
czy to naprawdę odpowiada na pytanie? – hoaz
- 1. Jaki jest preferowany sposób łączenia dwóch zlewów?
- 2. Kiedy używać kontenera IOC?
- 3. Jaki jest dobry sposób dodawania zależności Pythona do kontenera Docker?
- 4. Jaki jest preferowany sposób aktualizacji generatorów Yeoman?
- 5. Jaki jest zalecany sposób iterowania kontenera w C++ 11?
- 6. Jaki jest preferowany sposób zwracania pustej tabeli w SQL?
- 7. Jaki jest preferowany sposób łączenia się z bazą danych PostgreSQL z PHP?
- 8. Jaki jest preferowany sposób tworzenia szablonów serwisu i motywów za pomocą usługi Wicket?
- 9. Jaki jest najbardziej elegancki sposób łączenia opcji?
- 10. Użyj kontenera IoC dla architektury wtyczki
- 11. Preferowany sposób tworzenia aplikacji internetowych za pomocą programu m2eclipse
- 12. Jaki jest preferowany sposób używania metod pomocniczych w Ruby?
- 13. Jaki jest preferowany sposób określić, czy procedura przechowywana istnieje
- 14. Jaki jest preferowany sposób korzystania z kolekcji równoległych w Scali?
- 15. Jaki jest preferowany sposób dołączania komunikatów o błędach do C++?
- 16. Abstrahowanie do kontenera IoC za Singleton - Czy to źle?
- 17. Jaki jest właściwy sposób łączenia ze sobą 2 obiektów javascript?
- 18. Wtrysk zależności/IoC w Workflow Foundation 4
- 19. Szyny: Jaki jest preferowany klejnot Mailchimp?
- 20. Jaki jest właściwy sposób wybierania i łączenia obiektów z LINQ?
- 21. Wstrzyknięcie zależności IoC do niestandardowego modułu HTTP - jak? (ASP.NET)
- 22. Jaki jest zalecany sposób łączenia się z MySQL z Go?
- 23. Najprostszy sposób wyczyszczenia kontenera za pomocą biblioteki graficznej javascript raphaeljs
- 24. Używanie nazw do rozróżniania instancji za pomocą IoC
- 25. Jaki jest poprawny sposób uaktualnienia pakietów APT za pomocą Ansible?
- 26. Jaki jest najlepszy sposób pobrania pliku za pomocą urllib3
- 27. Jaki jest najszybszy sposób aktualizacji istniejących rekordów za pomocą sekwencji?
- 28. Jaki jest najlepszy sposób rejestrowania wyjątków za pomocą ETW?
- 29. Jaki jest właściwy sposób debugowania skryptu npm za pomocą vscode?
- 30. Jaki jest prawidłowy sposób analizowania zmiennych za pomocą JavaParser?
wydaje się, że brakuje rejestracji kodu i brakuje mi rejestracji adnotacji. –