我认为这取决于特定的项目。
例如,如果不同的业务领域彼此完全独立,那么我将按业务领域进行组织。
但是,如果业务域之间存在共享代码,或者说业务域是同一代码库的不同变体,那么按技术领域进行组织似乎更加合乎逻辑。而且,如果您使用任何一种面向对象的语言,那么您可能可以在特定于业务的文件中将通用控制器,模型等子类化,以使其更薄。
两者之间还有一个(黄金)过渡-将共享代码剥离到自己的域中,并在其他域中使用它。这为您提供了直觉式的布局,但允许在业务域之间共享代码。
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。我认为大多数框架都是按技术领域组织的,因为它们倾向于期望只有在共享代码的情况下,您才将不同的业务领域混合到单个项目中,否则将创建单独的项目。
编辑:
例如,假设有一个处理公司仓库的Web应用程序。以通用形式,这可能适用于许多公司,但每个公司可能都有一些未满足的特定条件,并禁止他们购买。例如,其中一个已将平板电脑部署到叉车上,需要为它们提供特殊的视图,而另一个则需要将项目分为三个级别,而不是默认的两个级别。
您当然可以为这些公司中的每一个分叉该项目。但是,如果框架/语言允许,则可以使用子类化或插件等来定制通用项目的各个部分,以满足每个客户的需求,并在Business Domain布局中进行组织。
例如,如果通用项目仅将Item本身导出为JSON,则Domain1可以将控制器子类化,并使其也导出最近的交付问题。
并且,如果以后您发现Domain1具有对Domain2也有效的组件,则可以将其通用版本提取到Shared。
如您所说,许多框架是按技术领域组织的,而这正是我目前使用的框架,因为我选择的固件使这变得容易。但是,用一点(或很多)手肘油脂,我想我也可以重写include路径来支持Business Domain布局。