【发布时间】:2011-06-11 09:41:06
【问题描述】:
我们正处于一个非常长的开发项目的开始,其中包含几个子项目。基本上每个子项目都需要几个月的时间来开发。代码本身将被拆分为多个 C# 项目,但物理数据库将由所有项目共享。
问题在于可维护性。如果我们向表中添加列,或将表拆分为两个较小的表,则必须返回并修改 C# DAL 以支持这些更改。这是不可接受的,因为我们将不断调整数据库以符合整个公司的需求,而不仅仅是单个程序的需求。不断更改旧代码将是一项永无止境的任务。
我们的 DB 人员提出了不同的看法。我们通过存储过程完成所有的 CRUD,并跨多个表使用 Linq 来执行我们的 SELECT 语句。然后,如果我们在几年后重新构建数据库,我们可以简单地提供相同的存储过程和视图,而不必修改旧代码。
我们的问题是,对于这样的事情应该使用什么 ORM? EF 似乎有点矫枉过正(也许不是)。像 SubSonic 这样的 T4 模板是否允许更简单(也许更快)的 DAL?
或者也许有人知道如何让整个过程不那么痛苦?我们宁愿不向我们的应用程序添加另一层,但我们也不想在每次更改数据库时返回并修改代码。
编辑 1: 所以当我说“我真的不想添加更多图层”时。这主要是因为我们已经有好几层了。我们有 Silverlight 视图、视图模型、BLL 对象(通过 CSLA),然后是 DAL,最后是 SQL 表。
【问题讨论】:
-
因此,通过尝试使用一个 Schema 来为所有用户提供服务,您基本上会得到最糟糕的模型。我总是想知道人们如何在不接触访问它的应用程序的情况下更改数据库。这似乎超现实。
-
通过数据库进行集成在 70 年代后期过时了。除非您使用的是像 Gemstone 这样的 OODB。
-
我是唯一一个认为这个问题会得到很多观点和答案但没有真正有用的人吗?
-
@flq - 想象一个工资计划。假设工资系统真的只关心个人的工资,以及他们工作的小时数。稍后,我们添加了一个计费系统,该系统根据员工的账单费率向客户计费。该账单费率与工资单无关,所以我为什么要返回并编辑可能已有多年历史的代码,只需添加报告程序所需的字段。
-
你为什么不创建一个服务(例如 WCF/OData 等),它也充当 DAL 并存在于它自己的服务器上。该服务使用 与数据库对话。然后所有项目都与 WCF 服务通信。如果数据库发生变化,只有 WCF 服务需要 - 服务合同保持不变。
标签: c# tsql entity-framework subsonic3 data-access-layer