2009-08-25 72 views
2

这是一个非常非常基础的问题。假设我想在.NET中构建一个具有n层体系结构的企业CRUD应用程序。我应该使用哪种数据访问方法?我想要互操作性,所以数据集已经出来了(我想它已经不是2003年了)。同样,.NET RIA Services公布的通过附加服务向非Silverlight客户端公开其功能的方法似乎不适用于更新操作convincing。我有种类的能够用Entity Framework拼凑出一些东西,而Entity Framework没有n层支持OOB,因此需要很多奇怪的反射类型的东西来模拟乐观并发的外观(MSDN杂志中的example看起来并不像它支持乐观并发。我在EF4中改进了这一点,但我有点怀疑,除了CTP之外,它还不是真正可用的)。.NET中n层CRUD应用程序的方法

那么,人们实际上可以在企业CRUD的项目中使用更新检查的乐观并发性做些什么呢?数据集? DIY与DTO和主知道涉及多少工作?那么如何处理绑定数据呢?假设我有一个绑定到DataGrid的集合,我是否需要收听CollectionChanged的更改?我是否需要保留一系列更改,以便在可撤销的情况下比较PKs?这似乎很噩梦。

而且,其次,如果更新检查乐观并发性并不是一个硬性要求呢?然后怎样呢?

+0

该应用有多大?它服务多久?有多少用户?一个位置还是多个?开发人员目前的经验和知识基础是什么?你说你想要互操作性,但是用什么? 没有这种背景下选择技术解决方案是毫无意义的。 – 2009-08-25 23:54:04

回答

3

首先,如果您打算将来转移到VS2010和.NET 4.0,我强烈建议您查看EF v4.0。自从EF v1.0发布以来,它已经进行了DRAMATICALLY改进,并且在我看来,它是对nHibernate和朋友之间强有力的竞争者。 EF也是许多微软未来数据计划的中心参与者,所以它不能像过去那样容易被忽略。它或者任何依赖它的.NET 4.0高级框架都应该很好地满足您的CRUD需求。

除此之外,我只是要确保一个简单的CRUD方法是从业务角度最适合。从技术角度来看,CRUD有很多意义,在较小的应用中,它通常是正确的选择。但是你使用了“企业”这个词,所以我很好奇你的应用程序的范围是否比简单的CRUD服务更好。

任何超出你的小型公司,总共有20-50名员工,我会考虑域驱动设计(DDD)和SOA。如果你需要像并发管理这样的东西,推动DDD的校长应该为你服务。 SOA通常用于非常大的项目,其中有许多开发团队同时处理需要彼此交互的多个项目。你的需求可能会过度,但是有一些好的校长可能仍然会帮助你。

+0

非常感谢。这是一个庞大而复杂的应用程序,可扩展至至少数百个用户。让我清楚 - 当我说n层CRUD时,我的意思是在这里包含SOA。我的问题是关于变更追踪。所以我希望让我的WCF服务公开操作 - 这些操作有简单或复杂的语义 - 供我的客户端调用。我看到它的方式有两种选择:可互操作的,特定于平台的DTO或一些.NET特定的技术(如EF),它们可能会或可能不会更新内置的更改跟踪。 看起来第二个解决方案可能会减少很多工作量。思考? – dks1983 2009-08-26 16:50:39

+1

实体框架v4。0确实有一个完整的多层次变更跟踪解决方案。他们实际上制定了一个开放的规范,用于在线路上传输更改跟踪信息,因此如果您使用非.NET客户端,它们仍然是兼容的。另外,如果需要,他们还提供对自定义更改跟踪的全面支持。就像我之前提到的那样,EF v4.0(而不是v1.0)现在是ORM皇冠的一个重要竞争者。如果更改跟踪是您最关心的问题,那么您应该查看EF:http://blogs.msdn.com/efdesign/ – jrista 2009-08-26 18:18:21

+0

还可以查看ADO.NET博客获取更多信息:http://blogs.msdn.com/ adonet/ – jrista 2009-08-26 18:20:02