【发布时间】:2012-09-19 18:32:20
【问题描述】:
我正在使用一个保存数据的系统开展一个项目,我正在考虑使用数据访问方法来获取数据,以便将其交给我在事物表示方面的组件。我认为这是一个 N 层架构。这是我的想法:
表示层(WebForms 和用户控件)
\/数据访问层(这是我的问题所在)
\/业务对象(系统中每个实体的 C# 类)
\/用于从数据库获取数据的现有 API(MS SQL 驱动)
在我的 DAL 中,我想使用系统中的特定 API 机制来获取业务对象,以便将它们传递给我的演示组件。我知道我创建各种实用程序存储库类以“获取一堆 X 业务对象”的存储库模式。例如。假设我有一个名为Article 的业务对象,我可以有一个ArticleRepository,我的“文章列表页面”将调用该存储库并为我获取Article 的集合。这很好,但对我来说在 DAL 上可能有点矫枉过正。是否有其他名称,例如在我的业务对象上使用 static GetAll() 方法?所以不是:
var repo = new ArticleRepository();
IEnumerable<Article> articles = repo.GetAll();
我在想这样简单的事情:
IEnumerable<Article> articles = Article.GetAll();
Article 类既是我的具有相关属性甚至辅助方法的业务对象,也有一个static GetAll() 方法。这种方法有名称吗?创建这个精简的伪存储库是不是一个坏主意?
我问这一切是因为简单地说,我将有很多存储库类来执行此操作,因为我有很多业务对象,所有这些对象都有独特的查询来从系统中获取它们。
【问题讨论】:
-
我认为您的业务对象应该与您的数据访问分开,因此您不应该在业务类中包含数据访问方法
-
将数据访问行为编码到您的业务对象中使得以后很难进行更改,破坏了关注点分离原则等。 Article 类的目的是表示一篇文章,而不是处理持久化本身在数据存储中。我强烈建议您查看 Entity Framework 或其他一些用于数据存储的对象/关系映射器。
标签: c# asp.net design-patterns repository-pattern data-access-layer