Лучший архитектурный шаблон, позволяющий избежать зависимостей модуля в слое объектов

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

У каждого сайта есть какая-то страница с контентом, например, статья или новости. Они могут управляться как модуль Feature / Article или модуль Feature / news. Оба имеют общие поля, такие как заголовок, сводка и изображение.

Теперь я создал модуль Feature/FeaturedContent. В котором у меня есть слайдер с собственными шаблонами. Но автор контента хочет выбрать и выбрать элементы из раздела "Статьи" или "Новости", где будут использоваться только заголовок, резюме и изображение.

Подключить элементы из другого модуля легко, но когда я отрисовываю их с помощью @Html.Sitecore().Field(Templates…). У меня не будет этих полей (title, summary и image, так как идентификаторы этих полей различны в каждом модуле) в моем шаблоне Feature/FeatureContent. И я не могу не сделать ссылку на другой модуль в слое Feature. И я не могу не добавить эти поля, так как эти поля не принадлежат модулю FeatureContent. Это потому, что Helix не разрешено иметь зависимость между модулями под слоем Feature.

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

1 ответ

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

В вашем конкретном случае я думаю, что подход должен заключаться в создании общей базовой функции с "шаблоном маркера интерфейса", содержащим 3 общих поля, которые вам требуются, и поддерживающие базовые классы Glass (или другой такой код ORM). Этот модуль станет зависимым от функций Статьи и Новостей.

Хотя технически это все еще проблема сопряжения, она все еще хорошо вписывается в наши принципы SOLID, и в некотором смысле она все еще нисходящая. Может быть заманчиво пометить это как модуль Foundation, но на самом деле это не так, я бы не одобрял эту мысль (на случай, если она у вас будет). Думайте об этом как о внутреннем подслое в более крупном слое объектов.

Другие вопросы по тегам