在使用Entity Framework的分层架构中,我应该从BLL返回POCO类吗?(需要架构指导)

For*_*ter 8 c# architecture entity-framework poco mvvm

我可能读得太多了,而且还有一些信息过载.所以我希望得到一些明确的指导.

根据我的收集,我可以使用VS2010的T4模板来生成与EF无直接关联的POCO类.我将这些放在他们自己的项目中,而我的DAL将有一个ObjectContext派生类,对吧?

一旦我有了这些类,在UI层中使用它们是否可以接受?也就是说,所生成的类之一是BookInfo保存有关公共图书馆的书籍(标题,版本,页面,摘要等).

我的BLL将包含一个类BooksBLL,例如:

public class BooksBLL
{
    ObjectContext _context;

    public void AddBook(BookInfo book) { ... }
    public void DeleteBook(int bookID) { ... }
    public void UpdateBook(int bookID, BookInfo newBook) { ... }

    //Advanced search taking possibly all fields into consideration
    public List<BookInfo> ResolveSearch(Func<BookInfo, bool> filter) { ... }

    //etc...
}
Run Code Online (Sandbox Code Playgroud)

因此,我的MVVM UI应用程序中的ViewModel将与上述BLL类进行通信并交换BookInfo实例.这样可以吗?

此外,Web上的MVVM帖子建议实现IDataErrorInfo用于验证目的.如果我在生成的POCO类上实现所述接口可以吗?我从样本中看到那些生成的POCO类包含所有虚拟属性和stuf,我希望添加自己的逻辑可以吗?

如果它有任何区别,目前,我的应用程序不使用WCF(或任何网络的东西).

此外,如果您发现我正在尝试构建BLL的方式出现严重错误,请随时在该区域提供帮助.

更新(根据要求提供附加信息):

我正在尝试创建一个库自动化应用程序.目前它不是基于网络的.

我正在考虑如下图层:

  • 由生成的POCO类(BookInfo,作者,成员,发布者,联系人等)组成的项目
  • 具有ObjectContext派生类(DAL?)的项目
  • 一个业务逻辑层,其类似于我上面提到的类(BooksBLL,AuthorsBLL等)
  • 使用MVVM模式的WPF UI层.(因此我关于IDataErrorInfo实现的子问题).

所以我想知道像BooksBLL在ViewModel类中使用一个实例,调用ResolveSearch()它来获取List<BookInfo>并呈现它......也就是说,在任何地方使用POCO类.

或者我是否应该有其他类来反映从我的BLL中暴露的POCO类?

如果需要更多细节,请询问.

Mis*_*sko 3

你不需要任何特别的事情......正如马克所说,没有“正确”的答案。但是,如果您的应用程序足够简单,您只需复制您的类(例如 BookInfoUI 和 BookInfoBLL),那么我建议仅使用业务类。额外的层没有任何作用,因此它不应该存在。如果您的应用程序很简单并且业务逻辑很少,那么 DDD 中的 Eric Evans 甚至建议将所有逻辑都放在 UI 层中。

为了进行区分,应用程序层应该具有对应用程序中发生的情况进行建模的类,而领域层应该具有对域中发生的情况进行建模的类。例如,如果您有一个搜索页面,您的 UI 层可能会从应用程序层中的 BookSearchService 检索 BookSearchResult 对象列表,这将使用域来拉取 BookInfo 列表。