Podoba mi się pomysł oddzielenia interfejsów i implementacji. Ale jak oddzielne? Czy definicje interfejsu znajdują się w osobnym zestawie .Net? Czy masz jeden projekt, który definiuje wszystkie interfejsy dla rozwiązania? W przeciwnym razie są problemy z okrężnymi zależnościami interfejsów?Gdzie interfejsy "fizycznie żyć"?
Odpowiedz
Umieść obiekty domeny i interfejsy w osobnym zestawie "domeny".
Ten zestaw nigdy nie powinien odwoływać się do niczego poza podstawowymi zespołami .net.
W ten sposób uzyskasz czystą separację od modelu domeny/usługi i implementacji.
Edit:
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/
Nie chciałbym umieścić interfejsy do oddzielnego zespołu właśnie przez wzgląd na niego. Jeśli jednak interfejsy biorą udział w dowolnej formie architektury IPC lub rozszerzalności, często ma to sens, aby nadać im własny zespół.
Jeśli masz projekty, które muszą się do siebie nawzajem odwoływać, to tak, będziesz potrzebować oddzielnego zestawu dla interfejsów, ale powinieneś również dokładnie przeanalizować architekturę, aby dowiedzieć się, czy istnieje inny sposób rozwiązania zależności cyklicznej.
Wolę zachować najpopularniejsze lub najprostsze implementacje interfejsu w podfolderze (i przestrzeni nazw) po nazwie interfejsu.
\project\ \project\IAppender.cs \project\Appender\ \project\Appender\FileAppender.cs \project\Appender\ConsoleAppender.cs
Jeśli rozszerzę tę klasę poza projekt. W specjalnym projekcie powtórz folder/przestrzeń nazw podobnie.
\specialproject\ \specialproject\Appender\ \specialproject\Appender\MemoryAppender.cs
W projekcie, nad którym pracuję teraz, interfejsy i powiązane klasy bazowe przechodzą na zespoły, które są logicznie rozdzielone między funkcje. Implementacje tych dostawców i klas mieszczą się w głównym zespole. Idea polega na tym, że ludzie używający naszego API mogą odwoływać się do większej lub jednej biblioteki DLL w jasny i logiczny sposób.
Mniejsze zastosowania nie wymagają tego rodzaju separacji. Ale bez względu na to, gdzie zachowam interfejsy, zachowam je w tej samej przestrzeni nazw co wszystkie klasy bazowe.
- 1. Fizycznie realistyczne naklejki
- 2. Domyślne metody i interfejsy rozszerzające inne interfejsy
- 3. Gdzie zdefiniować interfejsy dla repozytorium w architekturze warstwowej?
- 4. Interfejsy VB.NET
- 5. Interfejsy prywatne
- 6. Standardowe interfejsy
- 7. "Nowicjusz" Interfejsy
- 8. Serializacja interfejsy
- 9. Interfejsy Blackmagic Decklink dla .Net
- 10. interfejsy API nie musi rozciągać się inne interfejsy Modernizacja 2
- 11. Interfejsy w Groovy
- 12. Interfejsy i metody asynchroniczne
- 13. F # interfejsy i właściwości
- 14. Interfejsy bez liczenia odwołań
- 15. Interfejsy dla DTO
- 16. AutoFixture i interfejsy
- 17. Interfejsy API rządu USA?
- 18. CMake target_link_libraries Interfejsy Zależności
- 19. zagnieżdżone interfejsy generyczne
- 20. hierarchiczne interfejsy i implementacje
- 21. generyczne interfejsy i polimorfizm
- 22. Dlaczego interfejsy nie [Serializable]?
- 23. niejawne vs jawne interfejsy
- 24. Ogólne i nietypowe interfejsy
- 25. Gdzie znajduje się lokalne repozytorium?
- 26. Rails 3 nieaktualne metody i interfejsy API
- 27. Ogólne interfejsy dla raportu półdokładowego
- 28. Docker Machine na Macu: Nie widzisz zamontowanych woluminów na hoście dokera/docker-maszynie? Gdzie są fizycznie przechowywane objętości?
- 29. W jaki sposób fizycznie przechowywane są dane HTML5 WebStorage?
- 30. Jak uzyskać nazwę zmiennej, która została fizycznie wpisana w deklaracji?
Pomyślałem, że warto zamieścić link do znakomitego artykułu Jeffery'ego Palermo na temat architektury cebuli http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ –
Dzięki. Ten artykuł bardzo dobrze wyjaśnia tę koncepcję. –