Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller 一种可扩展数据库模型的设计_Model View Controller_Design Patterns_Database Design - Fatal编程技术网

Model view controller 一种可扩展数据库模型的设计

Model view controller 一种可扩展数据库模型的设计,model-view-controller,design-patterns,database-design,Model View Controller,Design Patterns,Database Design,目前,我正在做一个项目,其规格不清楚-嗯,谁不知道。我想知道设计一个DB的最佳开发策略是什么,它迟早会通过附加的表和关系进行扩展。我想包括“可变性” 我主要关心的是,我想应用设计模式(这是一个大学项目),我想通过选择合适的设计模式(在我的例子中是MVC和一组模型级的子模式),将不变的因素从那些变化中分离出来。 然而,当涉及到DB时,我可能不得不用MVC方法重新设计我的模型,因为我的域模型在稍后的阶段需要一组表示DB表的不同类。我使用Hibernate作为数据库和应用程序之间的抽象层 你能从一个非

目前,我正在做一个项目,其规格不清楚-嗯,谁不知道。我想知道设计一个DB的最佳开发策略是什么,它迟早会通过附加的表和关系进行扩展。我想包括“可变性”

我主要关心的是,我想应用设计模式(这是一个大学项目),我想通过选择合适的设计模式(在我的例子中是MVC和一组模型级的子模式),将不变的因素从那些变化中分离出来。 然而,当涉及到DB时,我可能不得不用MVC方法重新设计我的模型,因为我的域模型在稍后的阶段需要一组表示DB表的不同类。我使用Hibernate作为数据库和应用程序之间的抽象层


你能从一个非常小的数据库开始,仅仅几个表和关系吗?如果我也想要一个高效的DB呢?我想知道在现实世界中应用了哪些策略。例如,当涉及到不断变化的需求时,干系人分析并不是一个充分的计划解决方案。我认为——在DB级别——我的设计模式结束了。因此,我希望通过明智的策略将其影响降至最低。

在不清楚的情况下,我更喜欢简约的DB设计,支持目前已知的需求。我的经验是,任何聪明的努力,为未来的需要建模,都会使模型更加复杂。当新的需求出现时,它们往往出现在不可预见的领域。针对未来需求的额外建模不能满足新的需求,反而使所需的重构更加困难


由于您已经选择了Hibernate来实现DB设计和OO模型的解耦,我认为坚持使用尽可能简单的DB是一个不错的选择。

简单的回答是:简约主义


试着找出主要的实体。不要担心这些属性,稍后您将填充它们。然后,创建实体之间的关系。使用wour最喜欢的ORM(Hibernate?)创建一个测试应用程序,构建一些单元测试,瞧,您的数据库操作性很差。:)

您所描述的内容几乎适用于所有项目。然而,你可以做一些事情

试着分离出你的问题领域的概念(而不是它们的实现)。请记住:扩展数据模型几乎总是很容易的(添加新表、新列等),但更改数据模型很困难,需要进行数据迁移

我提倡使用敏捷开发过程:现在只实现您需要的,但在建模之前确保您了解完整的问题

在开始破解代码之前,您应该检查的另一件事是您选择的基础架构是否合适。当您想要经常更改模式时,使用关系数据库通常是不匹配的。文档数据库没有模式,因此更灵活。我认为您应该评估使用关系数据库是否真的适合您的应用程序。

“目前我正在做一个规范不明确的项目”

给定“database”标记,我假设您是在数据库上下文中问这个问题的

请记住,数据库是一组事实断言(大写)

如果不清楚您的用户希望数据库注册哪种类型的“事实断言”,那么您就无法定义(数据库的结构)


您将首先尝试清除所有不清楚的内容,从而帮助您自己和您的用户。

没有一个项目是在需求完全已知且始终固定的情况下开始的。使用敏捷、迭代的方法进行数据库设计,以便在开发过程中适应变化


所有数据库设计都是可扩展的,并且在其生命周期内可能会发生更改。不要试图避免改变。只要确保您拥有合适的人员和流程,以便在变革发生时有效地管理变革。

记住Brian Kernighan的规则:“在加快变革速度之前,先做好变革。”