【问题标题】:Approach for n-tier CRUD applications in .NET.NET 中 n 层 CRUD 应用程序的方法
【发布时间】:2025-12-25 11:35:06
【问题描述】:

这是一个非常非常基础的问题。

假设我想在今天构建一个具有 n 层架构的 .NET 企业 CRUD 应用程序。我应该使用什么数据访问方法?我想要互操作性,所以 DataSets 出来了(我想它也不再是 2003 年了)。同样,.NET RIA Services 所宣传的通过附加服务向非 Silverlight 客户端公开其功能的方法对于更新操作似乎不是很convincing。我有点能够用实体框架拼凑一些东西,它没有 n 层支持 OOB,因此需要许多奇怪的反射类型的东西来模拟乐观并发的外表( MSDN Magazine 中的 example 看起来不支持乐观并发。我 hear 这在 EF4 中得到了改进,但我有点怀疑,除了 CTP 之外它还没有真正可用)。

那么,对于具有更新检查乐观并发的企业 CRUD,人们实际上可以为他们的项目做些什么呢?数据集?使用 DTO 进行 DIY,天知道涉及多少工作?以及如何处理绑定数据?假设我有一个绑定到 DataGrid 的集合,我是否需要听 CollectionChanged 进行更改?我是否需要保留大量更改,以便在有撤消时比较 PK?这似乎是一场噩梦。

其次,如果乐观并发的更新检查不是硬性要求怎么办?然后呢?

【问题讨论】:

  • 应用有多大?它将服务多长时间?有多少用户?一个位置还是多个?开发人员目前的经验和知识基础是什么?你说你想要互操作性,但是用什么?在没有这种背景的情况下选择技术解决方案是没有意义的。

标签: .net database entity-framework n-tier-architecture crud


【解决方案1】:

首先,如果您计划在未来迁移到 VS2010 和 .NET 4.0,我强烈建议您研究 EF v4.0。自从 EF v1.0 发布以来,它有了显着的改进,在我看来,它是与 nHibernate 和朋友之类的强大竞争者。 EF 也是微软未来许多数据计划的核心参与者,因此不能像过去那样轻易忽视它。它,或者任何依赖它的 .NET 4.0 更高级别的框架,应该可以很好地满足您的 CRUD 需求。

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

除了拥有 20 到 50 名左右员工的小型公司之外的任何事物,我都会研究领域驱动设计 (DDD) 和 SOA。如果您需要诸如并发管理之类的东西,那么驱动 DDD 的主体应该可以很好地为您服务。 SOA 通常适用于非常大的项目,在这些项目中,您有许多开发团队同时处理需要相互交互的多个项目。对于您的需求来说,这可能有点矫枉过正,但有一些好的原则可能仍然会有所帮助。

【讨论】:

  • 非常感谢。这是一个庞大而复杂的应用程序,将扩展到至少数百名用户。让我说清楚 - 当我说 n 层 CRUD 时,我的意思是在这里包括 SOA。我的问题实际上是关于变更跟踪。所以我想让我的 WCF 服务公开操作——这些操作具有简单或复杂的语义——供我的客户调用。在我看来,我有两种选择:可互操作的、特定于平台的 DTO,或某些 .NET 特定技术(如 EF),这些技术可能会或可能不会内置用于更新的更改跟踪。似乎第二种解决方案的工作量可能会很多。想法?
  • Entity Framework v4.0 确实具有完整的多层更改跟踪解决方案。他们实际上开发了一个用于通过网络传输更改跟踪信息的开放规范,因此如果您使用非 .NET 客户端,它们仍然是兼容的。此外,如果需要,他们还为自定义更改跟踪提供全面支持。就像我之前提到的,EF v4.0(不是 v1.0)现在是 ORM 王冠的有力竞争者。如果更改跟踪是您最关心的问题,您真的应该查看 EF:blogs.msdn.com/efdesign
  • 谢谢。后续问题:如果 .NET 4.0 不在讨论范围内,并且您仅限于 .NET 3.5 SP1 库,您会怎么做?那你会做出什么选择呢?
  • 我会使用 nHibernate。它不像 EF v4.0 那样丰富和方便,但它具有大部分相同的功能。它在 n 层 SOA 更改跟踪领域的能力稍差……您可能不得不推出自己的实现。但是 nHibernate 是一个非常丰富、经验丰富的 ORM,受到社区的严格审查。如果您愿意花一些钱,LLBLGen 可以提供更好的 n 层变更跟踪,但是……它需要花钱。
最近更新 更多