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的方式出现严重错误,请随时在该区域提供帮助.
更新(根据要求提供附加信息):
我正在尝试创建一个库自动化应用程序.目前它不是基于网络的.
我正在考虑如下图层:
所以我想知道像BooksBLL在ViewModel类中使用一个实例,调用ResolveSearch()它来获取List<BookInfo>并呈现它......也就是说,在任何地方使用POCO类.
或者我是否应该有其他类来反映从我的BLL中暴露的POCO类?
如果需要更多细节,请询问.
你不需要做任何特别的事情......正如马克所说,没有“正确”的答案。但是,如果您的应用程序足够简单,您只需复制您的类(例如 BookInfoUI 和 BookInfoBLL),那么我建议仅使用业务类。额外的层没有任何作用,因此它不应该存在。如果您的应用程序很简单并且业务逻辑很少,那么 DDD 中的 Eric Evans 甚至建议将所有逻辑都放在 UI 层中。
为了进行区分,应用程序层应该具有对应用程序中发生的情况进行建模的类,而领域层应该具有对域中发生的情况进行建模的类。例如,如果您有一个搜索页面,您的 UI 层可能会从应用程序层中的 BookSearchService 检索 BookSearchResult 对象列表,这将使用域来拉取 BookInfo 列表。
| 归档时间: |
|
| 查看次数: |
2429 次 |
| 最近记录: |