我正在将旧版Web窗体应用程序扩展/转换为全新的MVC应用程序。扩展既涉及技术,也涉及业务用例。遗留应用程序是一个做得很好的数据库驱动设计(DBDD)。所以例如如果您有不同类型的员工,例如运算符(operator),主管,商店老板等,并且需要添加新类型,则只需在几张表中添加一些行,瞧,您的UI会自动具有添加/更新新内容的所有功能员工类型。
但是,层的分隔不是很好。
新项目有两个主要目标
我打算创建一个新项目,同时考虑到可扩展性要求,用域驱动设计(DDD)代替数据库驱动设计(DBDD)。但是,如果我将其与传统DBDD应用程序的性能进行比较,则从数据库驱动设计过渡到域驱动设计似乎会对性能要求产生反作用。在旧版应用程序中,来自UI的任何数据调用都将直接与数据库进行交互,并且任何数据都将以DataReader或(在某些情况下)DataSet的形式返回。
现在,有了严格的DDD,任何对数据的调用都将通过业务层和数据访问层进行路由。这意味着每个调用都将初始化一个业务对象和一个数据访问对象。一个UI页面可能需要不同类型的数据,这是一个Web应用程序,每个页面都可能被多个用户请求。同样,MVC Web应用程序是无状态的,每个请求每次都需要初始化业务对象和数据访问对象。
因此,对于MVC无状态应用程序而言,DBDD在性能方面似乎比DDD更可取。
还是DDD中有办法同时实现DDD提供的可扩展性和DBDD提供的性能?
最佳答案
您是否考虑过某种形式的命令查询分离,其中更新是通过域模型进行的,而读取是通过DataReader进行的?完全DDD并不总是合适的。