Zauważyłem, że wielu programistów definiuje interfejs dla klasy KAŻDEGO, który zostanie wtryśnięty przy użyciu frameworka DI. Jakie są zalety definiowania interfejsów dla każdej klasy?Dependency Injection & using interfaces?
Odpowiedz
pozwoleniem komponenty aplikacji (klas, które zawierają logikę aplikacji) implementować interfejs jest bardzo ważne, ponieważ promował koncepcję:
programu do interfejsu, a nie implementacji.
To skutecznie Dependency Inversion Principle. Dzięki temu można zastąpić, przechwycić lub udekorować zależności bez potrzeby zmiany konsumentów takiej zależności.
W wielu przypadkach programiści będą łamać zasady SOLID, jednak w przypadku mapowania typu "jeden do jednego" między klasami i interfejsami. Jedną z zasad, która jest prawie na pewno naruszona, jest Open/closed principle, ponieważ gdy każda klasa ma swój własny interfejs, nie jest możliwe rozszerzenie (dekorowanie) zestawu klas o zagadnienia przekrojowe (bez sztuczki generowania dynamicznego proxy).
W systemach, które piszę, definiuję dwa ogólne interfejsy, które obejmują większość kodu warstwy biznesowej. Nazywane są ICommandHandler<TCommand>
i IQueryHandler<TQuery, TResult>
:
public interface ICommandHandler<TCommand>
{
void Handle(TCommand command);
}
public interface IQueryHandler<TQuery, TResult> where TQuery : IQuery<TResult>
{
TResult Handle(TQuery query);
}
Poza ładnym bocznej efekt nie trzeba definiować wiele interfejsów, pozwala to na dużą elastyczność i łatwość testowania. Możesz przeczytać więcej na ten temat here i here.
zależności od systemu piszę, mogę również użyć interfejsów, takich jak:
IValidator<T>
walidacji komunikatówISecurityValidator<T>
stosowania ograniczeń zabezpieczeń wiadomościIRepository<T>
, repozytorium wzórIAuthorizationFilter<T>
dotyczące stosowania filtrowania autoryzacji/zabezpieczeń na zapytaniachIQueryable<T>
.
W zależności od systemu, piszę, gdzieś pomiędzy 80% a 98% procent wszystkich komponentów implementuję jeden z tych ogólnych interfejsów, które definiuję. Sprawia to, że stosowanie zagadnień przekrojowych do tak zwanych "błahych" to tak zwana joinpoints.
Ten wpis blog ma wiele odpowiedzi szukasz: http://benpryor.com/blog/2006/08/23/java-advantages-of-interfaces/
Jeśli nie projektowania interfejsów, masz zamiar zostać sparaliżowane, gdy przychodzi czas byłaby kodu i/lub dodaj ulepszenia. Używanie frameworka DI nie wchodzi w grę, jeśli chodzi o projektowanie interfejsu. To, co daje ci DI, to późna oprawa i znacznie lepsza umiejętność pisania testów jednostkowych.
nie znaleziono strony.! proszę zaktualizować –
- 1. Dependency Injection z TypeConverters
- 2. Groovy Dependency Injection
- 3. Dependency Injection Startup Performance
- 4. Dependency Injection jako funkcja językowa?
- 5. Laravel Unit Testing Dependency Injection
- 6. Automapper wraz z Dependency Injection
- 7. Practical Singleton & Dependency Injection question
- 8. Wiosna Dependency Injection z TestNG
- 9. Dependency Injection Container - Wzór Fabryka
- 10. Understanding Play 2.4 Dependency Injection
- 11. Dlaczego struktury Dependency Injection obsługują hierarchie kontenerów?
- 12. PHP - Dependency Injection laravel: Parametry podaje do Dependency konstruktora
- 13. Jaki jest związek między OSGi i Injection Dependency Injection?
- 14. ASP.NET 5 MVC 6 Injection Dependency Injection z wieloma konstruktorami
- 15. ZF2: Dependency Injection, MVC, konfiguracje i Bootstrap
- 16. Dependency Injection - Kto jest właścicielem interfejsu?
- 17. Kiedy używać Dependency Injection? Kiedy nie?
- 18. Wtyczka ASMX Dependency Injection i IoC
- 19. Dependency Injection (za pomocą SimpleInjector) i OAuthAuthorizationServerProvider
- 20. Slim ramy: currying vs Dependency Injection
- 21. Używanie Injection Dependency jako alternatywy dla Singletonów
- 22. Konstruktor Dependency Injection w ASP.NET MVC Controller
- 23. Aurelia Dependency Injection Decorator nie działa
- 24. Jak zrobić Generic repozytorium z Dependency Injection
- 25. Żądana usługa nie została zarejestrowana! AutoFac Dependency Injection
- 26. Injection dependency C++ - przez odniesienie lub przez boost :: shared_ptr?
- 27. Dependency Injection ze statycznym rejestratora, statyczne klasy pomocnika
- 28. IoC Dependency Injection dla obiektów stanowych (nie globalnych)
- 29. Dependency Injection i struktura projektu dla aplikacji konsolowych
- 30. Zbyt wiele argumentów Konstruktora dla Wzorca Wzorca Dependency Injection/Dziedziczenia
Dlaczego blisko? A może poświęcisz czas i zostawisz komentarz? – aryaxt
-1 Zobacz najczęściej zadawane pytania. "Jakiego rodzaju pytań mogę tu zadać?" i "Jakie pytania nie powinienem tu zadawać". Są to pierwsze dwa na liście. –
Twoje pytanie jest poprawne i interesujące, ale jest trochę niejasne i mało szczegółowe (na przykład nie ma przykładów kodu), dlatego ludzie go zignorowali i głosowali, że zostanie on zamknięty. – Steven