Tim*_*dge 8 c# t-sql entity-framework data-access-layer subsonic3
我们正处于一个包含多个子项目的长期开发项目的开端.基本上每个子项目都需要几个月的时间来开发.代码本身将分成几个C#项目,但物理数据库将由所有项目共享.
问题是可维护性.如果我们向表中添加一个列,或者将一个表拆分成两个较小的表,我们将不得不返回并修改我们的C#DAL以支持这些更改.这是不可接受的,因为我们将不断调整数据库以满足整个公司的需求,而不仅仅是单个程序的需求.不断改变旧代码将是一项无休止的任务.
我们的DB人员提出了不同的观点.我们通过存储过程完成所有CRUD,并在几个表中使用Linq来执行SELECT语句.然后,如果我们从现在起几年后重构数据库,我们可以简单地提供相同的存储过程和视图,而不必修改我们的旧代码.
我们的问题是,ORM应该用于这样的事情吗?EF似乎有点矫枉过正(可能不是).像SubSonic这样的T4模板是否适合简化(也许更快)DAL?
或者也许有人知道如何让整个过程不那么痛苦?我们宁愿不在我们的应用程序中添加另一个层,但我们也不想每次进行db更改时返回并修改代码.
编辑1:所以当我说"我真的不想添加更多图层"时.这主要是因为我们已经有几层.我们有Silverlight视图,视图模型,BLL对象(通过CSLA)然后我们有DAL,最后是SQL表格.
C# DAL... not just the needs of a single program.C#DAL作为一个单独的程序集的重点在于它可以在任何类型的.NET应用程序中重用.您将遇到的主要问题是,如果数据库发生更改,则DAL必须更改(一次),然后必须使用新DAL重新部署所有依赖于DAL的应用程序.您还遇到非.NET应用程序无法使用DAL的问题.
好的,那么如何集中DAL以便您不必为每个应用程序重新部署它?想想SOA.您可以构建一个WCF服务来包含DAL(可能还有BLL).您的所有应用程序(如果使用Web服务,甚至是非.NET的应用程序)都可以使用此服务.数据库更改时,您将更新WCF服务并部署一次.只要确保你没有做任何重大改变!如果需要添加/更改功能,请创建MyMethod2.
注意:当您听到n层时,它通常指的是三层,其中每层是独立的软件,通常位于不同的服务器上:表示(UI),应用程序(您的BLL/DAL),数据(您的SQL数据库).这种架构有其优点.
We'd rather not add another layer to our application.好的,所以三层可能不是你的最佳方法.
neither do we want to go back and modify code everytime we make a db change 那么你的DBA人建议的是唯一的方法.
但是,请考虑一下:更改存储过程与修改代码相同吗?它基本上是一回事.SQL存储过程通常不受版本控制或测试,但它们应该是.SQL没有像.NET这样的语言的丰富性.WCF可以在Web场中轻松扩展.一旦考虑了这些和其他原因,就可能值得采用三层/ SOA方法.
这实际上取决于您的项目规模,员工技能,未来增长等等,这是您可以确定的.