Джеффри Палермо был пионером луковой архитектуры, и я нашел хороший подход.
http://www.headspring.com/jeffrey/onion-architecture-part-4-after-four-years/
Однако его утверждение «Внутренние уровни определяют интерфейсы. Внешние уровни реализуют интерфейсы» кажется противоречащим IoC, если я правильно понимаю, в котором говорится, что потребитель определяет интерфейс, а поставщики реализуют его, т.е. контроль лежит на потребителе, а не на провайдере.
Этот принцип имеет для меня смысл, поскольку, представьте, что вы пишете пользовательский интерфейс, этот принцип означает, что вы можете продолжить создание своего пользовательского интерфейса, ничего не зная о сервисах, которые вы собираетесь вызывать, поскольку вы отвечаете за определение интерфейса, который предоставляет все функциональность, которая вам понадобится.
Таким образом, заявление Джеффриса кажется противоречивым и сбивает меня с толку относительно того, где разместить контракт (определения интерфейсов), потому что, похоже, оно подразумевает следующее: Уровень домена MyEntity IMyService Service MyEntityService: IMyService
Поскольку под доменом нет слоя, куда мне поместить IMyEntity. Также это означает, что я не могу создать проект презентации, пока домен не существует и не определил IMyService.
Как я заметил, где мне разместить IMyEntityRepository и MyEntityRepository? Поскольку сервис полагается на IMyEntityRepository, а MyEntityRepository полагается на IMyEntity