it-swarm.com.ru

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

Есть ли какая-то разница между ними (лук | шестиугольник), насколько я понимаю, они одинаковы, они сосредоточены на области, которая лежит в основе приложения и должна быть независимой от технологии/инфраструктуры. 

Каковы различия между ними, если таковые имеются?

Кроме того, я не вижу никакого реального преимущества в использовании одного над другим или даже против N-слоистой архитектуры, если плохое выполнение, если просто следовать одному из них, не будет иметь никакого значения

Каковы преимущества использования одного над другим и почему вы будете использовать его? когда его использовать?

Спасибо

5
MCR

Каковы различия между ними, если таковые имеются?

Onion: Существуют слои с зависимостями, всегда указывающими внутрь, то есть слой может использовать любой из слоев внутри него. Внутренний слой - это модель предметной области, а внешний - инфраструктура, но число слоев между ними может варьироваться.

Шестиугольный (это альтернативное название для исходного названия "Порты и адаптеры"): нет слоев. У вас есть приложение, порты и адаптеры. Порты принадлежат приложению, они являются API/SPI приложения. Адаптеры находятся вне приложения, и каждый из них зависит от порта приложения.

У некоторых людей возникает путаница в том, что при реализации гексагональной архитектуры большинство людей физически не помещает каждый адаптер в артефакт, но объединяет все в один артефакт (например, слой инфраструктуры). Кроме того, они зависят от адаптеров во всем приложении, а не только от порта, который они используют. Так что на самом деле это будет лук.

Реализация гексагонального права должна отделять адаптеры друг от друга, и каждый адаптер должен зависеть только от порта, который он использует/реализует (в зависимости от того, является ли порт драйверным или управляемым).

Другое отличие состоит в том, что Hexagonal ничего не говорит о структуре внутренней части шестиугольника (приложение).

Каковы преимущества использования одного над другим?

Преимущество шестиугольника в том, что он более модульный, у вас есть четкое разделение компонентов, предотвращающее утечку кода между ними. Лук, с другой стороны, более опасен в этом смысле, так как вы можете получить доступ, например, к базе данных непосредственно из пользовательского интерфейса (они оба принадлежат одному и тому же слою).

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

Зачем тебе это использовать? когда его использовать?

Смысл использования любого из них заключается в том, что вы сосредотачиваетесь на реальной проблеме, которую пытаетесь решить, без использования каких-либо технологий или инфраструктуры. Приложение не зависит от технологий, и его легко перенести с одного фреймворка на другой. Из-за этого их обоих называют «чистыми» архитектурами. У вас есть ядро ​​приложения без кода платформы, аннотаций и т.д. 

Итак ... Зачем их использовать?

Потому что вы улучшаете удобство сопровождения, тестируемость и получаете чистый код.

Когда их использовать?

Я бы лучше сказал, когда их не использовать. Если приложение, которое вы разрабатываете, не является сложным, например, это просто CRUD, возможно, оно не заслуживает их использования.

Лично мне больше нравятся «Порты и адаптеры».

Надеюсь, что мое объяснение помогло.

12
choquero70

Существует разница между многоуровневой архитектурой и семейством архитектур, связанных с луком. Многоуровневая архитектура работает с иерархической взаимосвязью между пользовательским интерфейсом и уровнями доступа к данным. В отличие от этого, архитектура луковиц рассматривает пользовательский интерфейс и доступ к данным как часть одного уровня.

Почему пользовательский интерфейс и доступ к данным находятся на одном уровне? В основе луковой архитектуры лежит домен с его бизнес-логикой. Это основной фокус. Домен не находится выше или ниже любого другого слоя. Это самый центр. Пользовательские интерфейсы, конечные точки отдыха и т.п. являются вторичными по отношению к домену, так же как и хранилища данных.

Архитектура ports и adapters (другое название гексагональной архитектуры) ясно показывает это по названию: существует любое количество портов, которые действуют как интерфейсы между доменом и внешней средой. Адаптеры реализуют порты, чтобы порты могли взаимодействовать с доменом.

0
Markus Pscheidt