【问题标题】:Modernising a 'Hand Rolled' Data Access Library对“手卷”数据访问库进行现代化改造
【发布时间】:2011-06-18 15:42:45
【问题描述】:

有这个网络应用程序,它依赖于一种直接从数据库生成的数据访问库(简单的数据对象和关联对象对其执行 CRUD 操作)。

所以来自 Person 表

ID
Forename
Surname
DoBirth

你会得到一个带有字段的生成 Person 类:

ID, Forename, Surname, DoBirth 从他们的 db 列中键入。

还有一个辅助类 PersonPersister

Create(Person p)  
Update(Person p)  
Delete(Person p)  

方法。

它还将在数据库上创建必要的 CRUD 存储过程。

当我开始时我对此感到不安,因为除了与 nHibernate 和 MEF 的短暂调情外,我习惯于对我的数据访问层进行手工编码。现在,我所有的担忧似乎都在实现,一年过去了,因为我们正在与更大的开发团队进行另一阶段的开发,并且裂缝已经开始出现。

基本问题是,作为开发人员,我们无法控制生成的内容,也无法对 DAL 进行版本控制。

每次发布​​时,我们都会花很多时间手动配置应用程序、dal 和数据库以使其正常工作。通常情况下,DAL 是从 dev db 生成的,然后应用于 live db,这当然缺少在开发过程中创建的表/sprocs 等。

在这些时候,我经常发现自己前往 jobserve.com,尽管除了这个问题我更喜欢在这里工作。

我的想法包括修改代码生成器,以便它覆盖显式处理 DAL 的 Visual Studio 项目中的源文件 - 然后这些文件可以在 CVS 中进行跟踪,也可以手动编辑。有没有人对这种策略有任何积极的经验?目前,构建生成的唯一工件是 dll,因此无法查看更改历史记录。

除了使用 ORM(管理层不是粉丝 - 是的,我知道)之外,我们还有哪些选择可以合理化它以让我们自己控制?我们仍然需要自动化元素,但目前我们拥有的数量是不可行的。

我们很幸运在这里订阅了 MSDN,因此我们正在运行带有自动构建的 TFS 2010、最新的 Visual Studio 等,但由于我们开发环境的这一方面,感觉就像我们是落后时代十年或更长时间。

【问题讨论】:

  • 对我来说听起来很混乱。我在一个项目中工作,开发人员在提交影响数据库模式的代码时必须更新“发布”SQL 脚本。 (作为发布周期的一部分,该脚本经过审查并应用于客户的数据库)
  • 'Churn' 是描述它的一种方式:-o

标签: c# asp.net code-generation data-access-layer data-access


【解决方案1】:

这让我觉得这更像是您的部署策略而不是开发策略的问题。无论您使用 ORM 还是您当前的工具,它都会从 dev 数据库生成(如果您使用自动生成)实体。您的部署需要确保对应用的所有更改都通过您的 QA 传播到您的生产系统,无论是应用、数据库还是其他一些依赖项。

【讨论】:

  • 我会说两者兼而有之,但更多的是在开发方面,而不是我习惯于使用 SQL Delta 同步开发数据库的部署方面 -> 登台 -> 生产,这不是t 特别繁重。问题更多与开发人员对数据库进行更改、运行代码生成和基于新生成的“DAL”中的对象编写定制代码有关,这些对象当然引用了实时数据库上不存在的对象/列等.
【解决方案2】:

一个维护所有存储过程的数据库项目怎么样...

优点

  1. DB 的版本控制
  2. 易于部署..您只需要 指定它去哪个数据库 只需单击一下,您就可以部署它...
  3. 您确切地知道发生了什么变化 引入新类的结果
  4. 所有数据库代码都与 其他代码,可从 一个 IDE 让它如此强大 更容易一次发送更改..

缺点

  1. 您可能需要投入时间 迁移你的礼物 创建存储的基础设施 procs to,创造的东​​西 存储 proc 脚本文件...基本上 创建/更新/删除中的所有代码 你提到必须是 又写了。

还有更多优点和缺点,您将更好地判断......

如果您考虑选择此选项,则必须查看下面的这些链接

  1. Beginner's tutorial
  2. Sample Project

【讨论】:

  • 听起来不错 - 不要以为您有指向示例/教程的链接,对吗...?
  • 非常感谢。我花了一段时间才理解它,但幸运的是,一旦可用的 MS 工具真正提供了帮助。接受 -)
【解决方案3】:

我过去曾使用过代码生成工具,并使用它们来生成模板代码,这些代码包含在 Visual Studio 项目中,然后手动修改以满足要求。这意味着代码生成只是一个节省时间的步骤,并且源代码完全受版本控制。

听起来不错的第一种方法是覆盖您所说的文件,然后您会获得版本控制和适当的 QA 发布周期的明显好处。

【讨论】:

    【解决方案4】:

    这里有两个问题 - 你的 DAL 和你的部署策略。

    要解决部署问题,您应该查看Fluent Migrations

    我最近为有类似问题的客户实现了它,现在他们可以部署应用程序,因为他们知道数据库将在必要时自动升级/同步(这是一个可选功能)。

    您可以使用流畅的 API、嵌入式 SQL 脚本、内联 SQL - 任何适合您的方式。您还可以非常轻松地将迁移器包含在自动构建过程中。

    This article 揭示了一家公司的使用经验,并提供了一些代码示例,说明如何将升级过程挂接到应用程序启动中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 2022-07-02
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2021-01-13
      • 1970-01-01
      相关资源
      最近更新 更多