nopCommerce_4.40.3 功能实现详解----- 第4章 核心层重构与自定义管道实现

程序与数据库进行CURD数据交换操作,不涉及客户端,只在服务器端进行,并且“nopCommerce_4.20”中,使用EFCore中间件,使程序与数据库进行CURD数据交换操作,导致“nopCommerce_4.20”与.NetCore框架中的内置管道中间件方法,没能产生极为紧密的耦合,也可以认为EFCore中间件与内置管道中间件方法,耦合程度极低。所以在“nopCommerce_4.20”程序只需要在内置依赖注入中件方法中,显式的注入相应内置的数据库中间件方法,即可以实现程序与数据库进行CURD数据交换操作。在“nopCommerce_4.30”及其以后的版本中,使用的却是FluentMigrator中间件,使程序与数据库进行CURD数据交换操作,导致“nopCommerce_4.30”及其以后的版本与.NetCore框架中的内置管道中间件方法,产生极为紧密的耦合,也可以认为FluentMigrator中间件与内置管道中间件方法,耦合程度极高。要想实现程序与数据库进行CURD数据交换操作,必须先实现对内置管道中间件的自定义扩展,这也是对核心层重构的一个原因。

0010 BaseEntity、ISoftDeletedEntity、Customer

BaseEntity类,继承于该类的实体类进行数据库表映射操作时,会在数据库相应表中添加一个编号字段。

IsoftDeletedEntity接口,继承于该接口的实体类进行数据库表映射操作时,会在数据库相应表中添加一个逻辑删除字段。

Customer类,一个客户实体类,通过唯一的GUID编号把该一个指定客户的注册数据信息,持久化保存到相应数据库表的一行中。

0011 ReaderWriteLokeType、ReaderWriteLockDisposable

ReaderWriteLokeType枚举,该枚举定义了三种读写操作,或者三种读写操作的操作状态,其它方法通过调用指定其中的一个,用来确认一个实例及其数据所处读写的操作状态。

ReaderWriteLockDisposable类,该类定义了小读写锁操作实例,通过该类中的拷贝构造方法来选择自己应该执行那种枚举的类型小读写锁操作实例操作,同时可以通过该类中的毁方法,来销毁小读写锁操作实例和释放相应内存空间。

1、重构IEngine接口及其NopEngine类,定义指定方法,使用NopEngine实例能够通过这些方法获取,已经注入到内置/第三方依赖注入容器实例中的,接口/抽象类/类相对应的具体实现类实例。

注意:Nop.Core.Infrastructure.NopEngine.GetServiceProvider方法。

   (1)、.NetCore框架内置依赖注入容器实例的特定的API方法:AddTransient、AddSingleton和AddScoped不但对用于对接口/抽象类/类及其相应的具体实现类进行注入操作,还限定了具体实现类实例在程序执行过程中的生命周期。

(2)、由于具体实现类实例在程序执行过程中有不同的生命周期,.NetCore框架内置服务提供程序接口默认实例(ServiceProvider = application.ApplicationServices;),只能获AddTransient、AddSingleton内置API方法,进行注入的具体实现类实例,如果通过.NetCore框架内置服务提供程序接口默认实例的GetService方法获取AddScoped内置API方法,进行注入的具体实现类实例时,就会出现异常(示例:21-07-19_NetCoreLifeCycle(AddScoped内置依赖注入API方法示例)):“Cannot resolve scoped service 'NetCoreLifeCycle.IScopedServer' from root provider.”

   (3)、AddScoped内置API方法,就是用于获取同一个请求过程中(浏览器的一个指定页面),所调用的所有具体实现类的实例,如果浏览器页面发生了跳转那么这些具体实现类的实例的生命周期也就结束了,即这些具体实现类,虽然在.NetCore框架内置依赖注入容器实例中,但已经不能够获取这些具体实现类的实例了,所以这些具体实现类的获取和释放,取决于Http上下文访问(IHttpContextAccessor)实例,也必须通过Http上下文访问(IHttpContextAccessor)实例,才能够初始化/实例化这些具体实现类。

0012 ApplicationBuilderExtensions、NopRoutingStartup

ApplicationBuilderExtensions类,“nopCommerce”开发者通过该类,对.NetCore框架中的内置管道中间件方法进行调用,从而自定义和扩展出自己的管道中间件方法。

    NopRoutingStartup类,根据其具体实现功能,对.NetCore框架中所定义的内置路由管道/依赖注入中间件方法,进行自定义扩展,并添加到.NetCore框架内置的管道/依赖注入中间件实例中。

    application.UseRouting();内置路由管道中间件方法,在“nopCommerce_4.30”及其以前的版本中,被直接定义在Nop.Web.Framework.Infrastructure.Extensions.ApplicationBuilderExtensions.UseNopEndpoints方法中,而在“nopCommerce_4.4x”中,它被迁移定义在NopRoutingStartup类中,这种改变我不认为是一种必须和好的改变,我只能看到定义更分割和细碎,而无其它的好处,“nopCommerce_4.30”及其以前的版本中的定义更为合适。内置路由中间件,它只有显式调用的管道中间件方法,而无显式调用依赖注入方法,但是根据.NetCore框架有管道必有依赖注入的设计实现规范,可能路由的内置依赖注入中间件方法可能被隐式的定义在.NetCore框架中。

2、重构Nop.Web.Framework.Infrastructure.NopMvcStartup.Configure方法。

0013 IRoutePublisher、RoutePublisher

    RoutePublisher类,继承于IRoutePublisher接口,把程序中自定义扩展的.NetCore框架内置路由提供程序实例,依次定义到内置终结点路由实例中。

注意:

在整个nopCommerce_4.40.3程序中有且只有一个自定义扩展路由提供程序实例。

0014 IRouteProvider、RouteProvider

RouteProvider类,继承于IRouteProvider接口,根据一/多个页面定义,自定义和扩展一/多个.NetCore框架内置MVC路由模式、规则、标准和映射关系。

3、重构Nop.Web.Framework.Infrastructure.DependencyRegistrar.Register方法。

4、重构Nop.Web.Startup.Configure方法。

5、按F5执行程序,程序正常运行到默认启动页面。

对以上功能更为具体实现和注释见:21-07-19_Nop_4.40.3(004_核心层重构与自定义管道实现完成,默认页面正常启动)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值