model-view-controller - 新的web项目设计模式规范

标签 model-view-controller design-patterns code-first software-design database-first

我有一个包含 50 多个表的关系数据库。他们有不止一种关系,一对一,不止一种。

在我将基于此数据库创建的新 MVC 项目中,代码优先还是数据库优先更有效?

按照最佳实践逻辑,在这么大(总共 20 亿+ 数据)的地方首选哪个?

问候..

最佳答案

在我看来,代码优先通常应该是更好的情况,因为您主要是为应用程序而不是数据构建软件。 “代码优先”意味着关注你的问题领域和领域模型。 访问数据库是持久化应用程序状态的实现细节,不应在软件设计的早期阶段提及。

领域驱动设计和整洁架构中可以找到类似的概念。


在您的情况下,虽然数据已经存在于数据库中,但主要问题仍然是:您的新项目是做什么用的?

案例一: 如果只是为了读取数据,比如presentation,那你可以考虑把数据库中的数据作为你的数据模型;这可能符合“数据库优先”的概念。但是,由于数据模型是您问题的模型,我仍然会首先将其视为代码。

案例二: 另一方面,如果有一些特定的要求,您绝对应该首先构建您的领域模型,以专注于您的应用程序的要求和问题,而不是数据库。 否则,您可能会发现您的应用程序被数据库模式卡住,导致应用程序逻辑复杂,具体取决于您的问题域和数据之间的差异程度,因为您的应用程序关注的不是问题而是数据。 为了访问数据库,您可能正在寻找的是 Data Mapper pattern .除此之外,您还可以实现 Repository Pattern ,它将专为您的领域模型中的实体而设计。


对于你提到的效率问题:
假设你是前面提到的案例2。在这种情况下,您可以查看command query responsibility segregation(CQRS)。 ,它将查询(读取数据的操作)与命令(更改系统状态的操作)隔离开来。 将读取/写入系统的责任分开可以提高应用程序中的演示效率。


总而言之,如果您没有实现只读应用程序,就没有数据库驱动的设计。

关于model-view-controller - 新的web项目设计模式规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72559623/

相关文章:

laravel - 如何根据首字母显示 View 中的记录?

asp.net-mvc - 为什么使用 Url.Content 来引用资源?

model-view-controller - MVC中View和Model之间的通信

user-interface - 默认复选框状态 : checked or unchecked?

c# - 如何将发布为 Web 应用程序的模板与使用此包装器的 Web 应用程序集成?

php - 何时使用 `public static function createInstance()` 而不是通常的构造函数来实例化类?

c# - 首先使用 Winforms 和 EF 4.1 代码进行数据绑定(bind)

ruby-on-rails - Rails 类型的 webapp 中的 'Model' 如何用函数式编程语言实现?

entity-framework - 首先从数据库模型自动更新代码,这可能吗?

java - 我们如何让一个字符串出现 minOccurs ="1"?