0063 GenericAttribute、GenericAttributeBuilder
GenericAttribute类,一个常规属性实体类,通过该实体类及其属性成员实现当前程序与数据库中指定表之间的数据交互操作。
GenericAttributeBuilder类,该类通过对父类中同名方法进行覆写,对设置实体类、属性成员进行约束关系和规则进行相应的定义,并把这些约束有关系和规则的定义,映射到相应的数据库中新生成的一个常规属性表及其字段上。
1、重构Nop.Data.Migrations.SchemaMigration类,通过本次重构在指定的数据库软件的相应数据库中自动生成常规属性表。
0064 NopCommonDefaults、IGenericAttributeService、GenericAttributeService
NopCommonDefaults类,通过该类所定义的常量字符串,为当前程序中的通用操作的实现提供相应的数据值。
GenericAttributeService类,继承于IGenericAttributeService接口,通过该类中的定义实现了页面、程序和数据库指定表之间常规属性相关数据信息的交互操作。
0065 BrowscapXmlHelper、IUserAgentHelper、UserAgentHelper
BrowscapXmlHelper类,该类主要根据户代理文件(这里特指:"~/App_Data/browscap.xml")中的爬虫信息值,自动生成爬虫程序文件(这里特指:"~/App_Data/browscap.crawlersonly.xml")文件,并把检索出符合条件的数据信息,持久化保存到该文件中。
UserAgentHelper类,继承于IUserAgentHelper接口,通过该类所初始化/实例化的一个“BrowscapXmlHelper”单例实例,来验证一个终端用户使用的移动终端设备、操作系统中的浏览器是否支持爬虫检索(即搜索引擎:https://www.baidu.com/、https://cn.bing.com/、http://www.google.com/ 等)搜索页面中的元数据。
注意:
1、通过BrowscapXmlHelper类,并不能对每一个终端用户的浏览器是否支持爬虫检索(即搜索引擎:https://www.baidu.com/、https://cn.bing.com/、http://www.google.com/ 等),都能够作出精准的判断,因为该判断是基于"~/App_Data/browscap.xml"文件的,虽然该文件在当前已经达到了90M以上,但它不一定包含所有的操作系统、浏览器及其版本的数据信息,特别是针对于最新版本的操作系统、最新版本的浏览器的数据信息,有极大的可能并没有被持久化保存到"~/App_Data/browscap.xml"文件中。
2、BrowscapXmlHelper类与AppSettings类,所实现操作的对象基本一样,都是持久化存储在程序指定文件中的常量数据值,且这些数据值的生命周期存在于整个程序的执行过程中,所以在程序执行时BrowscapXmlHelper类,也被nopCommerce开发者定义为一个单例实例(见下图)。
0066 NopTaskDefaults
NopTaskDefaults类,该类通过其属性成员实例在用户表中持久化一个名为:“builtin@background-task-record.com”的默认用户实例。
2、重构Nop.Core.Domain.Customers.Customer类,通过本次重构定义了删除属性成员。
3、重构Nop.Services.Customers.NopCustomerServicesDefaults类。
4、重构Nop.Services.Customers.CustomerService类,及其Nop.Services.Customers.ICustomerService接口。
0067 NopAuthenticationDefaults、IAuthenticationService、CookieAuthenticationService
NopAuthenticationDefaults类,通过该类所定义的常量,为当前程序中的身份认证操作的实现提供相应的数据值。
CookieAuthenticationService类,继承于IAuthenticationService接口,通过该类中的定义实现了页面、程序和数据库指定表之间身份认证相关数据信息的交互操作。
5、重构Nop.Web.Framework.Infrastructure.DependencyRegistrar.Register方法添加语句:
//通过.NetCore框架依赖注入容器实例的指定API方法,对用户代理助手具体实现类进行依赖注入操作。
services.AddScoped<IUserAgentHelper, UserAgentHelper>();
//通过.NetCore框架依赖注入容器实例的指定API方法,对常规属性服务具体实现类进行依赖注入操作。
services.AddScoped<IGenericAttributeService, GenericAttributeService>();
//通过.NetCore框架依赖注入容器实例的指定API方法,对Cookie身份认证服务具体实现类进行依赖注入操作。
services.AddScoped<IAuthenticationService, CookieAuthenticationService>();
6、按F5执行程序,在指定数据库中自动生成常规属性表,并且所有后台页面正常显示。
对以上功能更为具体实现和注释见21-08-25_Nop_4.40.3(021_常规属性服务、用户代理助手、身份验证服务的定义实现,所有页面正常显示)。