Creo que esto depende de un proyecto específico.
Por ejemplo, si los diferentes dominios comerciales son totalmente independientes entre sí, entonces me organizaría por dominio comercial.
Pero si hay un código compartido entre los dominios comerciales, o más bien, los dominios comerciales son diferentes variantes de la misma base de código, entonces parece más lógico organizar por dominio técnico. Y si usa algún tipo de lenguaje orientado a objetos, entonces probablemente pueda subclasificar sus controladores genéricos, modelos, etc. en sus archivos específicos de la empresa para hacerlos más delgados.
También hay un punto intermedio (dorado) entre los dos: elimina el código compartido en su propio dominio y úsalo en otros dominios. Esto le brinda un diseño inteligente, pero permite el código compartido entre dominios comerciales.
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
PD. Creo que la mayoría de los marcos se organizan por dominio técnico solo porque tienden a esperar que mezcle diferentes dominios de negocios en un solo proyecto solo si ha compartido código y de lo contrario crearía proyectos separados.
EDITAR:
Por ejemplo, supongamos que hay una aplicación web que maneja el almacén de una empresa. En forma genérica, esto podría aplicarse a muchas empresas, pero cada una de ellas puede tener algunos detalles que no se cumplen y les prohíbe comprar. para organizar elementos en tres niveles en lugar del valor predeterminado de dos.
Por supuesto, podría bifurcar el proyecto para cada una de estas empresas. Pero si el marco / lenguaje lo permite, puede usar subclases o complementos, etc. para personalizar partes del proyecto genérico según las necesidades de cada cliente y organizarlas en los diseños de Business Domain.
Por ejemplo, si el proyecto genérico exporta a JSON solo el artículo en sí, Domain1 puede subclasificar el controlador y hacer que también exporte problemas de entrega recientes.
Y si luego descubre que el Dominio1 tiene un componente que también es válido para el Dominio2, puede extraer una versión genérica de este a Compartido.
Como dijiste, muchos frameworks se organizan por dominio técnico y eso es lo que he usado por ahora, solo porque mi FW de elección lo hace más fácil. Pero con un poco (o mucha) grasa de codo, creo que podría reescribir las rutas de inclusión para admitir también el diseño de Business Domain.