“nopCommerce”程序通过设置服务对ISettings接口及其实现类CachingSettings进行依赖注入操作,所以本章将先解释设置服务的实现。
(1)、重构Nop.Core.BaseEntity类。
0040、ISetting
(2)、ISetting接口在“nopCommerce”程序中主要用于多个具体现类的继承操作,“nopCommerce”程序可以通过该接口与多个具体现类进行批量的依赖注入操作和相应的实例化操作
0041、HashHelper
(3)、HashHelper类通过一些指定的参数实例,创建一个指定散列(哈希)字符串。
(4)、重构Nop.Data.EfRepository类。
1、定义public virtual TEntity GetById(object id)方法。
2、定义public virtual void Delete(IEnumerable<TEntity> entities)方法。
0042、IRepositoryExtensions、IQueryableExtensions
(5)、当本人看的这两个“类!”的名称时,第一反应是“喔”它们是两个“接口!”,但是仔细查看了两个类的定义格式后,才确认两者的的确确是两个类。“nopCommerce”开发者在命名上误导人的能力真是让人无语,在“nopCommerce”程序中存在着一定数量误导人的命名,但是都没有这两者这么的明显和直接。
IRepositoryExtensions类主要是通过一个指定类型实体实例的编号获取该实例,并把该实例与相应的缓存键字符串,构建为键/值对,缓存存储到内存中。
IQueryableExtensions类,通过指定类型实体实例的多个实例与相应的一个缓存键实例,构建为相应的键/值对后存储到内存中。
1、该类及其成员都是静态的,从而保证了该类及其成员实例的生命周期,只要不执行特定操作就会存在于整个程序的执行过程中,只要修改好相应的配置,可以删除该实现类的定义,也不影响“nopCommerce”程序的正常执行。
2、该类中的操作在“nopCommerce4.2”中是分散定义在服务层的各个类的相应方法中的,而“nopCommerce4.3”为了统一管理、增加移植性、降低耦合程序,把分散定义在服务层的各个类的相应方法中的操作集中定义在该类中。
0043、IScheduleTask、ClearCacheTask
(6)、ClearCacheTask:类继承于IScheduleTask接口。该类执行一个指定内存缓存管理器的清理操作,用来销毁和释放该内存缓存管理器在内存中的缓存数据。
0044、ICacheKeyService、CacheKeyService
(7)、CacheKeyService类继承于ICacheKeyService接口。该类通过前缀字符串、构建参数字符串、内存保留时间等参数实例初始化/实例化一个指定的缓存键实例。
0045、NopConfigurationDefaults
(8)、NopConfigurationDefaults类,用于初始化/实例化了一些常用的静态存缓存实例。
(9)、重构SettingService类继承于ISettingService接口。
(10) 、在Nop.Web.Framework.Infrastructure.DependencyRegistrar.Register方法中定义语句:
//通过“Autofac”实例方法对缓存键服务的自定义接口及其实现类进行注入操作。
builder.RegisterType<CacheKeyService>().As<ICacheKeyService>().InstancePerLifetimeScope();
(11)、总结:
“nopCommerce”程序缓存定义实现与设置的定义实现深度的耦合,这在整个程序实现的复杂程度直线上升,这可能与“nopCommerce”的业务需求相关,毕竟“nopCommerce”程序需要有极强的适用范围,所有设置表中存在着大量的默认设置数据,它们需要被缓存到内存中,以提升“nopCommerce”程序的性能。由于深度的耦合在迁移“nopCommerce” 程序缓存定义时就必须迁移设置定义,但是对于大多数开者来说并不需要这么极强的适用性。可以通过以下操作来实现在迁移“nopCommerce” 程序缓存定义时不迁移设置定义。
- CachingSettings类与ISettings接口的依赖注入操作直接定义在Nop.Web.Framework.Infrastructure.DependencyRegistrar.Register方法中,而非Nop.Web.Framework.Infrastructure.SettingsSource类中。
- 或删除缓存定义与实现的关于CachingSettings类与ISettings接口相关定义和调用。
本从当前没有时间实现上述操作,如果有时间一定需要按照上述方式来实现示例程序。
对以上功能更为具体实现和注释见21-06-24_Nop4.4(020_服务层设置和缓存定义实现完成,构建后无语法错误产生)。