您正在建立一个跟踪公司的系统。这些公司有联系人。这些联系人通常都是专家,只回答某些类型的问题,例如帐单/付款,销售,订购和客户支持。
使用域驱动设计和洋葱架构,我使用以下类型对它进行了建模:
- 公司
- 有联络人
- 联系
- 有联系方式
- ContactType(枚举)
- CompanyRepository(接口)
- EFCompanyRepository(在外部程序集中定义,使用EntityFramework,实现CompanyRepository)
对于如何为该应用程序建模数据库,我们的团队意见分歧。
A面:精益DDDers:
- 定义哪些ContactTypes对一个联系人有效是Domain的工作。向数据库中添加表以验证是否未保存未知的ContactType是域泄漏的迹象。它将逻辑传播得太远了。
- 将静态表添加到数据库和相应的代码是浪费的。在此应用程序中,数据库解决了一个问题:保留事物并将其还给我。编写一个额外的表和相应的CRUD代码很浪费。
- 更改持久性策略应尽可能容易。更改业务规则的可能性更大。如果我决定SQL Server花费太多,则不需要重新构建放在架构中的所有验证。
B面:传统主义者[这可能不是一个好名字。DBCentrists?]:
- 在数据库中存储没有读取代码就没有意义的数据是一个坏主意。报表和其他使用者必须自己重复值列表。
- 按需加载数据库类型字典的代码并不多。不用担心
- 如果更改的源是代码而不是数据,那么当更改时,我将不得不部署位而不是简单的SQL脚本。
哪一方都不对或错,但从长远来看,其中一方可能会更有效率,计算初始开发,错误等的开发时间。这是哪一方-还是有更好的折衷办法?其他编写这种样式的代码的团队做什么?