В основе DCI лежат когнитивные инструменты, которые он предоставляет разработчику. Я не уверен, что вы видели все замечательные лекции Джеймса Коплина / Трюгве Реенскага , но я постараюсь раскрыть суть этого для любого новичка в понятиях. Речь идет о перемещении поведения системы из взаимодействующих с ней объектов предметной области (объектов данных или того, чем является система) и объектов поведения (что делает система) в качестве граждан первого класса, которые опосредуют взаимодействие между объектами, придавая им функциональность в контексте варианта использования как раз вовремя.
Подумайте, BDD. Мы кодируем поведение не во многих объектах, таких как частички функциональности, разбросанных по всем нашим объектам данных, которые тесно связаны со слоем постоянства, но внутри связных объектов, которые существуют исключительно для варианта использования (истории) и которые внедряют возможности и координируют взаимодействия этих тупых объектов данных. Как и просто уровни физической архитектуры, медленно меняющиеся объекты данных не загружаются быстро меняющейся реализацией функций, которую они постоянно носят с собой. Скорее, Ruby предоставляет нам возможность легко внедрить поведение в объекты во время выполнения, когда / если это необходимо только в контексте варианта использования.
В качестве примера в ROR, если у вас есть действие контроллера, задействованное в сценарии использования, в котором существует матрица вероятности события, когда большинство записей может быть инициировано только в небольшом проценте запросов, тогда создается экземпляр сети раздутого поведения. Тяжелые объекты, обладающие знаниями для выполнения каждого события для каждого возможного варианта использования данных, не нужны. Кроме того, несомненным плюсом является то, что мне не нужно копать 18 файлов в моем текстовом редакторе, чтобы понять, как работает это взаимодействие, вместо того, чтобы вся логика была чисто абстрагирована шаблонам в интерфейсе, предоставляемом объектом контекста.
Что касается вашего вопроса о «другом» уровне абстракции между контроллерами и моделями в рельсах, я не уверен, на какой другой вы ссылаетесь. В любом случае, да. Во всех смыслах. Нет проблем. Шаблоны проектирования и принципы SOLID Дяди Бобса - это в значительной степени общепринятые передовые практики в проектировании ОО. Оба из них настоятельно поощряют слабосвязанные абстракции между политикой и реализацией. Они оба помогают избежать катострофических свалок мозга разрушающей величины Римской империи, потому что они обеспечивают общую структуру, понятную всем. DCI, для меня, предоставляет тот же тип когнитивной структуры, но для облегчения понимания и эффективного управления системой, и это святой Грааль для любого объектно-ориентированного дизайнера.