Как правильно следовать CLEAN если нужно сделать совместный модуль

В контексте подхода CLEAN архитектуры каждая функциональность рассматривается как "фича" (feature), и каждая фича структурирована в отдельные слои: "data" (данные), "domain" (домен) и "presentation" (представление). Мой вопрос касается именно слоев "data" и "domain".

В слое домена одной из его обязанностей является определение интерфейсов для источников данных (DataSources), в то время как слой данных предоставляет конкретные реализации этих интерфейсов домена. Такая организация применяется к отдельным фичам, например, к "Фиче A" для упрощения.

Теперь давайте рассмотрим сценарий, когда "Фича A" и "Фича B" частично делят реализацию источника данных. Предположим, что обе фичи используют три API-запроса, и один из этих запросов является абсолютно одинаковым для обеих фич. Было бы правильнее, чтобы каждая фича имела собственную реализацию, даже если это приведет к дублированию кода, или лучше создать общий модуль "shared data" и "shared domain", чтобы обе фичи могли использовать одну и ту же реализацию?

Я склоняюсь к созданию общих реализаций, но беспокоюсь, не нарушит ли этот подход принципы CLEAN архитектуры. В частности, это означало бы, что реализации придется вынести из модулей, специфичных для фич, и определить их внешне. Еще один вопрос: как определить, когда реализацию следует переместить в общий модуль? Например, если реализация изначально находится в одной фиче, но потом оказывается нужной в другой фиче, должно ли это служить сигналом для рефакторинга функциональности в общий модуль?


Ответы (0 шт):