【问题标题】:Should a .Net beginner bother with ORM or wait until he gets more experience?.Net 初学者应该为 ORM 烦恼还是等到他获得更多经验?
【发布时间】:2011-03-22 15:45:46
【问题描述】:

我对 .Net 和它的数据库方面比较陌生。

我计划在这里使用 .Net 和 C# 和 Visual Studio 2008 重写一些旧版 VB6 应用程序。

我研究过强类型数据集、表适配器等。 它工作得很好,但我发现强类型数据集不是完全可管理的,特别是当数据库模式发生变化并且代码感觉比面向对象更程序化时。 我发现它也往往会使代码混乱很多,并且生成的类型名称往往很长......

考虑到我对 .Net 相对缺乏经验,我真的不想进一步增加学习曲线,因为毕竟我有截止日期...... 我看过 NHibernate 之类的东西,它看起来很吓人......我不确定有时间了解他们的 XML 文件等目前是如何工作的......

简而言之,我现在应该打扰 ORM 还是等待我在 .Net 和 ADO.net 方面积累了更多经验...即使这意味着必须在几个月内重写应用程序以使用 ORM我会解决的。

我知道这是一个主观问题,但我相信经验丰富的开发人员在两条道路上奔波或必须培训新员工的答案对我很有用。

提前致谢,

【问题讨论】:

  • 忘了提到 ADO.net 数据集和数据表很容易绑定到控件,这是一大优势。不确定大多数 ORM 工具有多复杂......
  • 如果它是一个简单的 CRUD 应用程序,只需要在屏幕上显示数据,这不是一个坏方法,但如果你有任何复杂的逻辑(业务规则等),数据集很快就会变得难以使用,即当您停止使用它们并编写自己的类来保存数据时。这也是 ORM 的用武之地。值得指出的是(与 VB6 和 WinForms 不同),大多数现代表示技术(如 WPF 和 MVC)都擅长将数据绑定到任何东西,因此使用数据集并没有真正的优势因为现在。

标签: .net data-access-layer


【解决方案1】:

你可以试试BLToolkit:除此之外,它是一个非常简单的 ORM:

public abstract class PersonAccessor : DataAccessor
{
    [SqlText(@"SELECT * FROM Person WHERE FirstName = @firstName")]
    public abstract List<Person> GetPersonListByFirstName(string @firstName);

    [SprocName("sp_GetPersonListByLastName")]
    public abstract List<Person> GetPersonListByLastName(string @lastName);
}

【讨论】:

    【解决方案2】:

    我强烈建议您研究 Mindscape 的 LIGHTSPEED。优秀的平台和建立在非常好的设计原则之上,一旦你掌握了基础知识,就会真正减少开发时间。还要对 nhibernate、实体框架等进行功能比较。

    【讨论】:

    • 谢谢。将创建的对象绑定到控件以进行显示/编辑是否容易,比如 DataGridView...我可能会使用 WinForms...
    • 最后,我想我会选择 Telerik 的 OpenAccess ORM,因为它似乎是最容易使用的一种。由于它与我也非常认真地考虑过的 LightSpeed 非常相似,因此我接受了这个答案。谢谢。
    【解决方案3】:

    听起来您有许多(我猜是相对较小的)应用程序要重写,所以我很想不立即使用 ORM。对于您的第一个应用程序,只需尝试使用 ADO 自己编写数据访问代码 - 但请尝试确保所有内容都分开良好,例如使用 Repository 模式。这样,如果您决定这样做,您可以相当轻松地将您的 ADO DAL 换成使用 ORM 的东西。

    一旦您自己完成了它,您就会更好地了解 ORM 可以为您做什么以及您是否想使用它(您可能会使用它!)。

    另外,这实际上取决于您正在编写什么类型的应用程序,但我建议先对模型进行分类(应用程序的核心类,通常是“员工”、“订单”等),并且然后基于此进行数据访问。这样做,您可以使用 EF4、NHibernate 等,它们可以根据您的 .Net 模型类生成数据库模式。 (尽管这意味着您不能轻松地使用 Linq to SQL,因为这需要先准备好数据库)。

    如果您确实想使用 ORM,并且您正在使用 SQL Server,Linq to SQL 很容易上手。主要缺点是你不能进行模型优先开发,它只支持 SQL Server,而且它不再处于积极开发中,所以花时间学习可能不是一件好事。

    【讨论】:

      【解决方案4】:

      您将不得不学习一些数据访问方法,因此您不妨使用/学习 ORM。

      我会选择微软的实体框架。

      查看 WCF 数据服务:http://msdn.microsoft.com/en-us/data/bb931106.aspx

      【讨论】:

      • 谢谢。我读过 EF 1.0 是不是很糟糕?我仍在运行 VS 2008,尽管我可以更加努力地争取获得迁移到 2010 的批准...
      • @Kharlos:EF1 几乎不值得付出努力,但 EF4 非常棒,尤其是在 CTP 版本中提供的 POCO 支持和仅代码可能性。
      猜你喜欢
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多