【问题标题】:The best way to organize work with database [closed]使用数据库组织工作的最佳方式[关闭]
【发布时间】:2011-12-11 19:03:11
【问题描述】:

我想知道从 C# 代码组织使用数据库的最佳方法是什么。

我曾经有不同的方法:

  1. 每个对象都有 Save、Update 和 Delete 方法,它们实现了所有的逻辑。
  2. 有一些静态类具有静态方法 Get、GetList、Update -- 与之前的方法几乎相同,但数据库逻辑是从数据域类中提取的。

现在我认为为我需要存储在某个地方的每个数据域类提供一些非静态类会很棒。

最好的方法是什么?有没有什么好的库可以提供好的 API 来存储对象?

【问题讨论】:

    标签: c# database architecture


    【解决方案1】:

    使用对象/关系映射器 (ORM)。我个人最喜欢的是休眠。如果您想要 Microsoft 产品,请使用 Entity Framework。

    ORM 通常实现UnitOfWorkRepository 模式,这使您更容易处理数据库操作并遵循单一职责原则。

    您还提到了单例。如果可能的话,我会避开它们。你试过unit test一个使用单例的类吗?除非单例是实际实现的proxy,否则这是不可能的。删除单例的最简单方法是使用 dependecy injection 反转依赖关系。有几个containers 可用。

    【讨论】:

    • 谢谢,看来我从这个答案中得到了一切:我需要学习的框架和模式。
    【解决方案2】:

    目前推荐的使用数据库的方法是通过ORM

    查看nHibernate(社区项目)和Entity Framework(Microsoft 提供)了解一些最流行的 .NET 选择,尽管还有更多。

    这些库为您提供所需的所有数据访问权限,并且需要进行一些配置。

    【讨论】:

      【解决方案3】:

      repository pattern 是一种非常常见的构建数据访问逻辑的方法。

      【讨论】:

        【解决方案4】:

        这两种方法都会让你在我工作的地方受到严格审查或被解雇。

        见:

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

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

        这是一个难题 - 使用 UnitOfWork 模式或存储库模式之类的东西解决了 20 年。大量的项目 - 删除“C#”(不,伙计,世界不会围绕一种语言解决)并查找对象/关系映射器。我记得 20 年前用 samlltalk 使用过一个,10 年前用 C# 编写过一个,有时 .NET 开发人员普遍认为字符串操作是最先进的。

        NHibernate、实体框架、哎呀,甚至 BlToolkit 作为我最近首选的轻量级工具包都向您展示了正确的模式。

        【讨论】:

        • 我知道这两种方法都有很大的缺陷,这就是我问这个问题的原因。提到 C# 以获取更多经验丰富的开发人员使用的框架列表
        猜你喜欢
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 1970-01-01
        • 2017-08-30
        • 2011-06-11
        相关资源
        最近更新 更多