asp.net core系列 63 范畴模子架构 eShopOnWeb项目分析 上

2019年7月2日11:03:36asp.net core系列 63 范畴模子架构 eShopOnWeb项目分析 上已关闭评论 310

一.概述

  本篇继承讨论web运用架构,讲基于DDD作风下最后的范畴模子架构,不同于DDD作风下CQRS架构,两者架构主要区别是范畴层的转变。 架构的演化是从范畴模子到CQRS,  一开始DDD是用范畴模子的分层架构,用单一的范畴模子处置惩罚营业逻辑的一切要领,特别是敕令和查询,这能够致使复杂性直线上升,CQRS是留住了DDD的长处又能使完成变得简朴高效。

   一样作为DDD范畴驱动设想下的支撑架构包罗:范畴模子架构和CQRS架构。虽然CQRS架构比拟范畴模子架构更受欢迎引荐,但范畴模子架构也一样须要相识和控制。

  在软件行业经由多年的传统三层开辟后,演化出了DDD范畴驱动设想。传统三层是UI层挪用BLL层,BLL层挪用DAL层,每层都有本身熟知的职责。然则瑕玷是编译时依靠干系由上而下运转,是一种高藕合,依靠顺序太大,而在设想准绳中应该是低藕合,越低越好

 

  1.1  Clean architecture

    Clean  architecture 被称为“清洁架构"。遵照依靠颠倒准绳以及范畴驱动设想准绳 (DDD) 的运用顺序倾向于到达相似的架构。此依靠干系被颠倒是:基本架构层和完成细节依靠于范畴层,经由过程在范畴层界说笼统或接口。然后由基本设施层中界说的详细范例来完成接口。明白这点很主要。

    比例在上篇项目中,由Equinox.Infra.Data数据接见层的Repository文件夹来完成范畴层的IRepository接口。由Equinox.Infra.CrossCutting.Bus 层 敕令总线的InMemoryBus类完成范畴层的IMediatorHandler接口。

    下图是DDD清洁架构多层以"同心圆"情势展示。经由过程下图能够相识到:依靠干系流向最内里的圆。application core位于此干系图的中间地位而得名,该application core没有任何依靠项。application core的Entities和Interfaces位于正中间,正中间外圈是application core的域效劳,域效劳一般挪用内圈中界说的Interfaces接口。application core表面UI(运用效劳层)和基本设施层都依靠于application core。

asp.net core系列 63 范畴模子架构 eShopOnWeb项目分析 上

    

      User Interface是显示层包罗:控制器和视图模子(包罗了运用效劳层)。

      Infrastructure是基本设施层包罗:仓储,别的效劳完成。

      application core是范畴层包罗:范畴效劳,范畴实体,范畴接口 (来基本设施层来完成)。

 

    下图更好的反应了DDD各层的依靠干系,实线箭头透露表现编译时依靠干系,而虚线箭头透露表现仅运转时依靠干系。范畴层是架构的中间层,不依靠于基本设施层,该层是可测试的。基本设施层援用范畴层来完成数据耐久化或横切关注点。

asp.net core系列 63 范畴模子架构 eShopOnWeb项目分析 上

 

    下图是asp.net core web运用顺序在DDD范畴模子计划中完全构架,展示了各层明白的职责散布,虚线指编译依靠干系,也能够明白为项目援用干系,实线则是运转依靠干系。

asp.net core系列 63 范畴模子架构 eShopOnWeb项目分析 上

    

   在相识DDD范畴模子构架分层后。接下来剖析eShopOnWeb项目,来控制DDD下的范畴模子架构。下面是二个有代表性的范畴模子架构项目,以微软的官方示例eShopOnWeb项目做重点剖析。在剖析中主要去相识范畴层内部是怎样完成的,以及营业处置惩罚流程代码完成。

 

二.项目引见 

  2.1.  IBuyStuff-dm项目

    IBuyStuff-dm项目是"Microsoft.net企业级运用架构设想"一书的项目案例(asp.net mvc项目)。从github上下载源码,须要在IBuyStuff.Server项目中装置mvc5(没果没有mvc5), 装置敕令以下:

     Install-Package Microsoft.AspNet.Mvc -Version 5.0.0

    项目构造以下所示(左图为项目构造,右图为范畴层二个类库):

asp.net core系列 63 范畴模子架构 eShopOnWeb项目分析 上

    

           项目分层申明: IBuyStuff.Server为显示层

                                        IBuyStuff.Application为运用效劳层

                                        IBuyStuff.Domain为范畴模子层

                                        IBuyStuff.Domain.Services为范畴效劳层

                                        IBuyStuff.Persistence为基本设施层    

 

  2.2  eShopOnWeb项目

    在ASP.NET Core手艺出来后,微软官方给出了一个eShopOnWeb项目案例(asp.net core mvc项目)。该项目演示了一些准绳和发起, 是一个简朴在线市肆,支撑阅读衬衫、咖啡杯和其他市场产物名录。项目构造以下所示:

asp.net core系列 63 范畴模子架构 eShopOnWeb项目分析 上

    

           项目分层申明:

                     Web包罗显示层,运用效劳层。个中Services文件夹和Interfaces文件夹代表是运用效劳层,在上篇中说到,显示层和运用效劳层都属于前端体系局限。

                     ApplicationCore范畴层,包罗了范畴内部的一切完成。

                     Infrastructure基本设施层。主如果EF数据耐久化。

                     tests文件夹包罗了一系列完全的测试项目。

 

三. 项目设置装备摆设

  3.1 启用数据库范例      

     下载了eShopOnWeb项目后,在Startup.cs的ConfigureDevelopmentServices要领中,能够挑选是基于内存或sql server存储,我们挑选运用sql server。

        public void ConfigureDevelopmentServices(IServiceCollection services)
        {
            // use in-memory database
           // ConfigureInMemoryDatabases(services);

            // use real database
             ConfigureProductionServices(services);
        }

 

  3.2 修正数据库链接地点

    修正appsettings.json文件中的数据库衔接,对应的两个数据库CatalogDb,Identity。

           CatalogDb数据库用于市肆的目次数据和购物车信息,Identity数据库用于运用顺序的用户凭证和身份数据。

 

  3.3 同步到数据库

    在vs2017中运用“顺序包治理器控制台“默许项目挑选Infrastructure,同步两个EF上下文到数据库。

        PM> Update-Database  -C AppIdentityDbContext
        PM> Update-Database  -C CatalogContext

    同步后,天生的两个数据库,下面展示了CatalogDb营业数据库的干系图,以下所示:

asp.net core系列 63 范畴模子架构 eShopOnWeb项目分析 上 

    Orders表是用户定单信息,包含了送货地点信息。

    OrderItems表是定单商品信息。

    Catalog是商城商品信息

    CatalogBrand是商城商品品牌信息

    CatalogType是商城商品种别。好比T-Shirt衬衫,Mug杯子

    Baskets 是购物车

    BasketItem是购物车商品信息。

 

    启动运转eShopOnWeb顺序,运用默许的用户名和暗码举行登录: [email protected]   [email protected]。 项目包罗二个模块功用,一个是定单治理,一个是用户治理。

asp.net core系列 63 范畴模子架构 eShopOnWeb项目分析 上

 

   参考资料

    Microsoft.NET企业级运用架构设想 第二版

    经常使用的web架构

    

avatar