具有业务层和DAL的WPF架构

Pab*_*lli 1 c# architecture wpf entity-framework data-access-layer

我在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,视图将使用所需的业务层的任何项目的静态存储库,并且此存储库将使用上面的类来获取DBContext并使用它如下所示:

    public static List<Novedades> GetNovedades()
    {
        using (ContextCreator db = new ContextCreator())
        {
            IQueryable<Novedades> novedades = db.getContext().Set<Novedades>().AsQueryable();
            return novedades.ToList();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这种做法有什么好处吗?提前谢谢你们.

Siv*_*pal 6

虽然我不太确定你的应用程序规模,但我觉得你已经开始走上正确的道路来分离关注点了.

但是,如果为每个视图类别创建单独的项目不会引入不必要的复杂性,则可能需要重新考虑.

我不确定你是否是WPF的新手,但是对于View层来说,为了更好的可维护性,松耦合和可测试性等,MVVM是组织现场的最佳选择模式.为了获得MVVM,您可以从头开始手动编码所有内容,或者有很好的框架,例如:

MVVM Lite

Assisticant

此外,如果您计划使用相对较大的(外行术语!!)/企业级应用程序,并且由于您正在寻找高度可维护,灵活的应用程序,您可以考虑使用Microsoft的PRISM框架.棱镜指导和可下载的PDF等

完成View部分后,您需要关注应用程序的Validations以及是否要在ViewModel或域对象中实现验证.Assisticant框架内置了一些很好的以域为中心的验证机制.

对于数据访问层,由于您选择使用EF,根据我的理解,到目前为止,工作单元存储库模式将极大地帮助您获得可扩展性,可测试性等功能.

如果您计划对应用程序的单元可测试性和松散耦合进行高度计划,则需要考虑使用适当的框架来控制和依赖注入的反转.

在这里,您可以检查WPF应用程序框架,以了解如何以分层方法组织WPF应用程序的不同区域.

希望这可以帮助你进一步挖掘.