我在WPF中开始一个新的应用程序,我希望它有一个好的架构,以便它可以维护。我正在使用实体框架,到目前为止我的计划是。
•查看图层:一个项目(启动),包含启动视图和主菜单。每种类型的视图都有不同的项目,例如,如果我有与Books相关的视图,那么我就会有一个名为BooksView的项目,包含所有视图。
•业务层:每种业务类的一个项目,例如BusinessBooks。如果需要,每个人都有一个具有特定操作的存储库和任何帮助程序。
•数据访问层:它包含一个名为Entity Framework的文件夹,其中包含DBContext和T4生成的类以及一个名为ContextCreator的类,其中包含以下代码:
public class ContextCreator : IDisposable
{
private MesaOperativaDB context;
public ContextCreator()
{
context = new MesaOperativaDB();
}
public MesaOperativaDB getContext()
{
return context;
}
public void Dispose()
{
context.Dispose();
}
}
然后视图将使用所需的业务层的任何项目的静态存储库,并且此存储库将使用上面的类来获取DBContext并使用它如下:
public static List<Novedades> GetNovedades()
{
using (ContextCreator db = new ContextCreator())
{
IQueryable<Novedades> novedades = db.getContext().Set<Novedades>().AsQueryable();
return novedades.ToList();
}
}
这种方法有什么好处吗? 提前谢谢你们。
答案 0 :(得分:6)
虽然我对你的应用程序规模还不太确定,但我觉得你已经开始走上正确的道路来分离问题了。
但是,如果为每个视图类别创建单独的项目不会引入不必要的复杂性,则可能需要重新考虑。
我不确定你是否是WPF的新手,但是对于View层来说,为了更好的可维护性,松耦合和可测试性等,MVVM是组织事物的最佳选择模式。 为了获得MVVM,您可以从头开始手动编码所有内容,或者有很好的框架,例如:
此外,如果您计划使用相对较大的(外行术语!!)/企业级应用程序,并且由于您正在寻找高度可维护,灵活的应用程序,您可以考虑使用PRISM framework from Microsoft。 Prism Guidance and downloadable PDFs etc.
完成View部分后,您需要关注应用程序的Validations以及是否要在ViewModel或域对象中实现验证。辅助框架内置了一些很好的以域为中心的验证机制。
对于数据访问层,由于您选择使用EF,从我到目前为止的理解,Unit-Of-Work with Repository pattern将极大地帮助您获得可扩展性,可测试性等功能。
如果您计划对应用程序的单元可测试性和松散耦合进行高度计划,则需要考虑使用适当的框架来控制和依赖注入的反转。
Here您可以检查WPF应用程序框架,以了解如何以分层方法组织WPF应用程序的不同区域。
希望这可以帮助你进一步挖掘。