Архитектура Onion - может ли каждый слой получить доступ к каждому интерфейсу (нарушая зависимости уровня)? - PullRequest
0 голосов
/ 12 декабря 2018

Я изучал и реализовывал шаблон, называемый Onion Architecture (http://jeffreypalermo.com/blog/the-onion-architecture-part-3/).

). Одна вещь, которая заставляет меня задуматься, если я правильно понимаю, заключается в следующем:

Все интерфейсыопределены в сборке Core. Реализации могут быть реализованы в других сборках и будут связаны с контейнером IOC.

Поскольку все интерфейсы определены в Core, а все сборки ссылаются на Core, это подразумевает, что каждая сборкаимеет доступ к каждому интерфейсу?

Т.е. теоретически вы можете импортировать службу UI в DAL, поскольку DAL имеет доступ к интерфейсу службы UI и разрешает его с помощью контейнера IOC.

Doesnне нарушает ли это цели многоуровневого проектирования? В традиционной модели это было бы невозможно, поскольку сборка DAL не ссылается на сборку пользовательского интерфейса.

Я что-то неправильно понимаю или это своего рода "злоупотребление"возможно в архитектуре Onion в отличие от обычного N-уровневого архитекторадифракционную картину?

1 Ответ

0 голосов
/ 20 декабря 2018

Все интерфейсы определены в базовой сборке.Реализации могут быть реализованы в других сборках и будут связаны с контейнером IOC.

Интерфейсы определены на каждом уровне и реализованы на любом внешнем уровне.Таким образом, слой зависит от всех слоев внутри него.Количество слоев не является фиксированным, вы можете иметь слои, которые вы хотите.Если под сборкой вы имеете в виду файл jar, на каждом слое будет сборка.

Поскольку все интерфейсы определены в Ядре, а все сборки ссылаются на Ядро, это означает, что каждая сборка имеет доступ ккаждый интерфейс?

Я не очень хорошо понимаю ваш вопрос, но думаю, что вы имеете в виду: "Может ли слой получить доступ к любому интерфейсу внутреннего слоя?"Ответ "да".И не только внутреннего уровня, но и любого внутреннего уровня.

Т.е. теоретически вы можете импортировать службу UI в DAL, поскольку DAL имеет доступ к интерфейсу службы UI и разрешает его с помощьюконтейнер МОК

Да, вы можете это сделать.Вы не должны, хотя, но архитектура позволила бы сделать это.

Разве это не нарушает цель многоуровневого дизайна?В традиционной модели это было бы невозможно, поскольку сборка DAL не ссылается на сборку пользовательского интерфейса

Да, вы правы.Это происходит из-за того, что слои являются кругами, и потому что в каждом круге шаблон ничего не говорит о его разбиении.

Я что-то недопонимаю или это своего рода «злоупотребление» возможно в архитектуре Onion в противоположностьк нормальной N-уровневой архитектуре?

Вы правы.

В этом отличие гексагональной архитектуры: гексагональная является более явной и у вас есть разные адаптеры, а не слои.

Здесь у вас есть еще один вопрос и ответ об луке по сравнению с гексагональной:

Архитектура лука по сравнению с гексагональной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...