如何最佳地组织数据库工作

4
我想知道从C#代码组织与数据库交互的最佳方法。
我以前有不同的方法:
1.每个对象都有Save、Update和Delete方法,实现了所有逻辑。
2.有一个静态类,其中包含Get、GetList、Update等几乎与前面相同的方法,但将数据库逻辑从数据域类中提取出来。
现在,我认为最好为我需要存储的每个数据域类都有一些非静态类来进行存储。
什么是最好的方法?是否有任何提供存储对象的良好API的好库?
4个回答

5
使用对象/关系映射器(ORM)。我个人最喜欢的是nhibernate。如果你想使用Microsoft产品,可以使用Entity Framework。
ORM通常实现UnitOfWorkRepository模式,使您更容易处理数据库操作并遵循单一职责原则。
您还提到了单例。如果可能的话,我会避免使用它们。您尝试过对使用单例的类进行单元测试吗?除非单例是实际实现的代理,否则这是不可能的。消除单例的最简单方法是通过使用依赖注入来反转依赖关系。有几个容器可用。

谢谢,看起来我从这些答案中得到了我需要学习的框架和模式。 - Alexander Romanov

4

现在处理数据库的推荐方法是使用ORM

看看nHibernate(社区项目)和Entity Framework(由Microsoft提供)这些最受欢迎的.NET选择,虽然还有很多其他选择。

这些库为您提供了所需的所有数据访问,但需要进行一些配置。


3

仓储模式是一种常见的组织数据访问逻辑的方式。

仓储模式


1

我工作的地方会对这两种方法进行严格审查并有可能解雇你。

具体来说:

  • 关注点分离。对象不应该处理自身的加载或保存。

  • 静态方法意味着您永远无法在两个不同的数据库中使用相同的类。

这是一个难题,20年前就已经通过UnitOfWork模式或Repository模式解决了许多项目-移除“C#”(不,伙计,世界不仅仅围绕一种语言)并查找Object/Relational映射器。我记得20年前在Smalltalk里用过一个,在10年前曾在C#中编写过一个,那时候.NET开发人员普遍认为字符串操作是最先进的技术。

NHibernate,Entity Framework,甚至是BlToolkit(我目前喜欢的轻量级工具包)向您展示正确的模式。


我知道这两种方法都有很大的缺陷,这就是我提出问题的原因。 C#被提到可以获取更有经验的开发人员使用的框架列表。 - Alexander Romanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接