Я думаю, це залежить від конкретного проекту.
Наприклад, якщо різні бізнес-домени абсолютно незалежні один від одного, я б організував бізнес-домен.
Але якщо між діловими доменами існує спільний код, а точніше, бізнес-домени є різними варіантами однієї і тієї ж кодової бази, то більш логічним виглядає організація за технічним доменом. І якщо ви використовуєте будь-яку мову об'єктно-орієнтованої мови, то, ймовірно, ви можете підкласифікувати свої загальні контролери, моделі тощо у файлах, що стосуються вашого бізнесу, щоб зробити їх тоншими.
Існує також (золотий) середина між двома - зніміть спільний код у власний домен та використовуйте його в інших доменах. Це дає вам макет на основі відчуттів кишок, але дозволяє ділитися кодом між бізнес-доменами.
Domain1 # This domain changes bits of standard MVC code
controllers
models
views
Domain2 # this domain only modifies views, all else is standard
views
Shared # Here is the better part of code base
controllers
models
views
PS. Я думаю, що більшість фреймворків організовуються за технічним доменом лише тому, що вони, як правило, очікують, що ви змішаєте різні домени бізнесу в один проект, лише якщо ви маєте спільний код і в іншому випадку створюєте окремі проекти.
Редагувати:
Наприклад, припустимо, є веб-додаток, який обробляє склад компанії. У загальній формі це може стосуватися багатьох компаній, але кожна з них може мати певні особливості, яких не дотримується, і забороняє купувати. Наприклад, одна з них розгорнула планшети для навантажувачів і потребує спеціального перегляду для них, а ще одна хоче впорядкувати елементи на три рівні замість двох за замовчуванням.
Звичайно, ви можете роздрібнити проект для кожної з цих компаній. Але якщо рамка / мова дозволяє, ви можете використовувати підкласинг або плагіни тощо, щоб налаштувати біти та фрагменти загального проекту під потреби кожного клієнта та організувати їх у макетах Business Domain.
Наприклад, якщо загальний проект експортує в JSON лише сам Елемент, Domain1 може підкласифікувати контролер і змусити його експортувати також останні проблеми з доставкою.
Якщо ви згодом виявите, що в Domain1 є компонент, який також дійсний для Domain2, ви можете витягнути загальну версію його до Спільного.
Як ви вже говорили, багато фреймворків організовуються за технічною областю, і це те, що я використовував зараз, тільки тому, що мій вибір FW полегшує це. Але, маючи трохи (або багато) мастила в ліктях, я думаю, що я можу переписати включені контури для підтримки макета Business Domain.