创建Model类或坚持使用通用数据库实用程序类更好吗?

时间:2008-08-05 20:10:43

标签: c# asp.net-mvc database ado.net

我们内部有一个简单的实用程序类用于数据库调用(围绕ADO.NET的轻量级包装),但我正在考虑为每个数据库/对象创建类。这样做是否明智,或者只有在我们使用ASP.NET的完整MVC框架时才会受益?

所以我们有这个:

SQLWrapper.GetRecordset(connstr-alias, sql-statement, parameters);
SQLWrapper.GetDataset(connstr-alias, sql-statement, parameters);
SQLWrapper.Execute(connstr-alias, sql-statement, parameters);

想到这样做:

Person p = Person.get(id);
p.fname = "jon";
p.lname = "smith";
p.Save();

或新记录 -

Person p = new Person();
p.fname = "Jon";
p.lname = "Smith";
p.Save();
p.Delete();

这会很聪明,还是会有点矫枉过正?我可以看到重用,更改数据库和维护/可读性的好处。

4 个答案:

答案 0 :(得分:8)

这个问题是加载的,数据驱动设计与域驱动设计。对于具有大量行为的任何应用程序,应首选域驱动设计。报告或实用程序应用程序倾向于使用数据驱动设计更好地(或更快地开发)。

您所问的是“我的公司应该如何设计我们的代码”。作为一个领域狂热者,我的直觉反应是尖叫。但是,由于问题的简单性,我不确定您是否完全理解您提出的更改的范围。我想你应该多谈谈你的团队。

获取一些文献,例如Evan's DDD本书或free foundations ebook,然后您就可以更好地判断应该走向哪个方向。

答案 1 :(得分:2)

MVC绝不是网络的唯一设计模式,但它是一个有用的设计模式。

在我看来,即使你不能/不会采用'V'或'C',也只会采用'M'来支付股息。

答案 2 :(得分:2)

你所讨论的方法被许多人视为好人,包括我!学习这种方法需要付出一些努力,但不要让它让你失望!

使用LINQ to SQL 尝试小项目怎么样?也许在nice reference project上找到google code,并研究其他人如何使用它。

这是一个简单的工具,可以让您熟悉将对象映射到数据库时遇到的一些问题。

然后,您将能够感受它,并决定是否值得学习曲线。

需要掌握新概念并进行实验,例如:

  • 工作单元:执行保存和删除等操作时,ORM不会立即执行此操作,而基于记录集的DAL将执行此操作。这可能会令人惊讶,因此您需要了解一下。阅读工作单元模式以了解这一点。
  • 批量操作是OR / M的问题。数据读取器可以有效地遍历数千行,但使用ORM时,在处理大批量对象时必须要小心。再一次,请读一读。
  • 关联似乎很棒,可以像customer.Orders.Count这样的东西,但它们也是许多问题的原因。在与协会合作时,您需要找到一些安全的做法。

......仅举几例。

对于初学者来说,不要担心继承和东西,只需从简单开始并拥有映射到表的简单实体。

尝试以与使用现有DAL相同的方式使用它们。然后开始尝试关联。

然后尝试在您的实体中添加更多行为。如果您开始喜欢这个,并且觉得您需要更多功能,请考虑尝试使用功能更丰富的ORM,例如LightspeedNHibernate

希望这有帮助!

答案 3 :(得分:0)

对我来说,看起来你正在尝试做LINQ已经为你做的事情。如果你被困在一个不能使用它的旧框架中,我可能会建议你使用Subconic(http://subsonicproject.com/),而不是手动手动创建所有这些模型对象。

我有一个项目,我处于类似的困境,并在结果中途改变为亚音速。更快的开发和更容易阅读/使用代码。