【发布时间】:2012-05-27 22:19:23
【问题描述】:
我正在将旧版 Web 窗体应用程序扩展/转换为全新的 MVC 应用程序。扩展既是技术方面的,也是业务用例方面的。遗留应用程序是一个完善的数据库驱动设计 (DBDD)。所以例如如果您有不同类型的员工,如操作员、主管、商店管理员等,并且您需要添加新类型,您只需在几个表中添加一些行,瞧,您的 UI 会自动添加/更新新类型员工类型。 然而,层的分离不是那么好。
新项目有两个主要目标
- 可扩展性(针对当前和未来的管道要求)
- 性能
我打算创建一个新项目,用域驱动设计 (DDD) 替换数据库驱动设计 (DBDD),同时牢记可扩展性要求。但是,如果我将其与传统 DBDD 应用程序的性能进行比较,从数据库驱动设计转向领域驱动设计似乎会对性能要求产生负面影响。在遗留应用程序中,任何来自 UI 的数据调用都将直接与数据库交互,并且任何数据都将以 DataReader 或(在某些情况下)DataSet 的形式返回。
现在有了严格的 DDD,任何数据调用都将通过业务层和数据访问层进行路由。这意味着每次调用都会初始化一个业务对象和一个数据访问对象。单个 UI 页面可能需要不同类型的数据,这是一个 Web 应用程序,每个页面都可以由多个用户请求。此外,一个 MVC Web 应用程序是无状态的,每个请求都需要每次都初始化业务对象和数据访问对象。 因此,对于 MVC 无状态应用程序而言,DBDD 似乎比 DDD 性能更可取。
或者在 DDD 中有一种方法可以同时实现 DDD 提供的可扩展性和 DBDD 提供的性能?
【问题讨论】:
-
作为一个有趣的问题加注星标,因为它从字面上理解了各种设计背后的机制。很多时候,这些讨论太抽象而无用。这个很直接。我很想知道答案是什么(我自己也不知道)。
-
在开始思考之前,我有几个问题: 1. 性能要求到底是什么?应用程序的响应速度。是否应该在 1 秒内响应所有查询,或者在 0.5 秒内获取数据并在 1 秒内响应更新? 2. 您是否已经有一些针对当前应用程序的指标以及基于 MVC 的应用程序的运行速度会慢多少?
-
我有当前应用程序数据库操作的指标。除了可能具有复杂和数据繁重的操作并且可能需要几分钟的报告之外,CRUD 需要不到一秒的时间,而数据库级别的最大数据获取操作发生在 2 - 3 秒内。 MVC 应用程序会慢多少,问题都是关于
-
这是与无状态的 MVC 应用程序的通信。您可以(并且应该)缓存任何可以缓存的内容。
标签: asp.net-mvc architecture domain-driven-design database-driven