2009-11-13 12 views
5

Zakładając, że chcę zastosować schemat wtrysku zależności w podejściu AOP, w celu wytworzenia modułów kodu. Jaka jest najlepsza praktyka związana z własnością współdzielonych interfejsów? Przez własność rozumiem treść kodu, do którego należy się odwoływać, aby móc korzystać z interfejsu.Dependency Injection - Kto jest właścicielem interfejsu?

Moim pierwszym przypuszczeniem jest to, że w AOP można zdefiniować bibliotekę klas interfejsów o nazwach z uwzględnieniem aspektu. eg: company.aspect.logging.ILogger. Każdy moduł będzie odwoływał się do tej biblioteki i unikał, aby jakikolwiek kod zaangażowany w implementację ILoggera definiował również ILogger.

Najlepsze praktyki?

+0

Dokładnie to, co bym zrobił (mając interfejsy w oddzielnej klasie, która tylko przechowuje interfejsy). – Tomas

Odpowiedz

1

Definiowanie biblioteki klas interfejsów to dobry początek. Daje to maksymalną elastyczność, ponieważ można całkowicie od siebie odseparować wszystkich klientów i wszystkich realizatorów.

Wadą tego podejścia jest to, że jeśli same zwracane Interfejsy eksportu inne interfejsy, takie jak ten:

public interface IMyInterface 
{ 
    IMyOtherInterface DoStuff(); 
} 

może trzeba napisać dużo kodu mapowania, które mogą zaludniać konkretnych klas z interfejsów (lub można ause AutoMapper).

Jeśli masz tylko jednego konsumenta, ale kilka wszczepiających, możesz zaoszczędzić sobie część tego mapowania, definiując interfejsy razem z konsumentem (nigdy z realizatorem), ale tracisz pewną elastyczność. Jednak nadal można zmieniać wykonawców niezależnie od konsumenta, ale nie na odwrót.

+0

Myślę, że struktura wtrysku zależności zajmie się dużą ilością kodu odwzorowania, biorąc Google Guice jako przykład. Bardzo dziękuję za wprowadzenie do AutoMappera. Moim pierwszym pomysłem na to narzędzie w odniesieniu do mojego pytania byłoby: 1 - zdefiniowanie interfejsów z implementacją 2 - użycie AutoMappera do zbudowania warstwy adaptera W ten sposób osiągnięcie hermetyzacji i wsparcia dla modułów zewnętrznych. Po prostu rozmyślam ... –

0

To zależy od celu interfejsu:

Jeśli celem interfejsu jest określić standardową Protokołu między zestawem alternatywnych dostawców oraz pojedynczego konsumenta, interfejs jest własnością konsumenta.

Jeśli celem interfejsu jest zdefiniowanie standardowego protokołu między pojedynczym dostawcą a zestawem alternatywnych konsumentów, interfejs jest własnością dostawcy.

Jeśli celem interfejsu jest zdefiniować standardowy protokół między zestawem alternatywnych dostawców i zestawem alternatywnych konsumentów, interfejs jest samodzielny.

Wreszcie, jeśli interfejsy są używane jako ogólne podejście do , zmniejszają złożoność, są zwykle własnością konsumentów i powinny być zdefiniowane tak wąsko, jak to możliwe, tak aby każdy interfejs wspierał potrzeby konsumenta w kontekście konkretnych wymagań.

Powiązane problemy