我对使用WPF 4.0和EF 4.0技术开发业务应用程序的架构感到困惑。
我的第一选择是传统的N层架构,包括:UI,业务逻辑层和数据访问层具有断开连接的行为。
通过这种方式,我为每个图层创建了3个项目,为我的实体/ DTO创建了另一个项目(每个图层都是一个程序集)。每个图层仅引用它的上层和下层(即:UI可以看到BLL但看不到DAL)。但是所有层都可以访问Entity / DTOs程序集以进行通信。 当我想创建一个带有DataGrid的简单CRUD表单时,问题就出现了。当返回实体/ DTO时,BLL处理DAL的DataContext,这就是迫使我使用STE的原因。但是有几个问题。例如,我应该为从BLL返回到UI的每个实体调用“StartTracking”方法。简而言之,我不确定这种模式的可靠性,或者我认为我必须忘记自动处理的CRUD表单。
我在DAL层使用存储库模型,但是当我搜索存储库模式时,我发现它不同。从UI中引用DAL / Repository和BLL / Services(非WCF或WebServices)层似乎也不错,因此我们可以拥有一个连接的环境(不使用STE)。
我看到一个例子,我们可以从存储库中获取一个人,但使用BLL或服务在其上做一些事情:
UI代码:
var person = new PersonRepository().GetPerson(10);
Bll.Salary.PaySalary(person);
-OR -
var person = new PersonRepository().GetPerson(10);
Bll.Person.MarkAsAbsent(person);
或类似的......
使用此模式,我们可以在DataContext处于活动状态时以连接的方式将实体/ DTO发送到UI。
我不知道我是否理解在大项目中使用存储库模式的方式。我认为以这种方式命名BLL或服务类和方法并不清楚。更多关于开发人员可能会对使用存储库方法或BLL /服务方法的位置或创建方法的位置(在存储库或BLL /服务中)感到困惑。
我更喜欢N-Tier架构,使用一种好的方法来跟踪实体/ DTO的变化,就像STE一样。
请您在这种情况下推荐最佳模式或/并向我推荐一些好的书籍或相关文件。
答案 0 :(得分:2)
我整理了一个示例应用,可以帮助您解决一些问题。您可以在我的博客文章中查看演示文稿说明和示例:
http://blog.alner.net/archive/0001/01/01/wpf_ef_4_sig_presentation_2010.aspx
该示例显示了使用STEs并包含一些帮助程序,以使Entity Framework STEs在桌面客户端应用程序中更好地工作。
存储库可以隐藏您获取数据的详细信息。我们的想法是,您可以将存储库的实现从使用本地数据库的存储库交换为使用远程Web服务的存储库,而不需要上层知道它。
答案 1 :(得分:1)
也许文章Architecture for WPF applications对您有所帮助。
您也可以查看 WPF Application Framework (WAF) 的BookLibrary示例应用程序。它显示了WPF MVVM应用程序以及应用所描述的体系结构的实体框架。