DataProviderType、DataSettings、DataSettingsManager、IRepository和NopDataSettingsDefaults在“nopCommerce4.2”中这些类被定义在Nop.Core.Data中,但在“nopCommerce4.3和nopCommerce4.4” 这些类被迁移定义在Nop.Data中,本人认同这种迁移定义操作,显得更加符合“nopCommerce”对工程项目中的类所实现功能的定位。
0012、DataProviderType、NopDataSettingsDefaults
DataProviderType枚举通过来实例化数据提供程序,该实例的值在“nopCommerce4.2”中被指定为微软生产的Microsoft SQL Server数据库,即指定使用Microsoft SQL Server数据库通过EFCore中间件与程序进行交互操作。
NopDataSettingsDefaults类通过静态属性中存储相对路径字符串,查找服务器启动项中是否存在一个用于保存数据库连接字符串等信息的文件,如果存在则通过JsonConvert.DeserializeObject方法把从dataSettings.json文件中读取的数据库连接基本信息字符串后,把该字符串反序列化存储到DataSettings类型实例中,最终把DataSettings类型及其实例映射存储到静态字典实例中,以保证DataSettings类型及其实例映射的生命周期为程序的整个执行过程。
0013、DataSettings、DataSettingsManager
DataSettings类通过整合DataProviderType枚举与NopDataSettingsDefaults类,把两个类的实例化对象存储到DataSettings类的相应的属性中。实际上程序通过读取操作把dataSettings.json文件中数据库连接基本信息等有相数据存储在DataSettings类实例的相应属性中;程序通过还可以通过指定方法存储在DataSettings类实例相应属性中的数据,以json格式持久化到dataSettings.json文件中,即DataSettings类实例与dataSettings.json文件是分别以不同格式和形式把相同数据,分别存储到内存和物理磁盘相应位置的文件中。
DataSettingsManager类首先通过一个bool属性实例,查找服务器启动项中是否存在一个指定文件,该文件持久化存储着与数据库连接相关的基本信息。如果存在该文件且它持久化存储着与数据库连接相关的基本信息,则把文件中信息,按照一定格式读取到字符串实例中,使用JsonConvert.DeserializeObject方法把该字符串存储到DataSettings类型实例中,同时把DataSettings类型及其实例映射存储到静态字典实例中,以保证DataSettings类型及其实例映射的生命周期为程序的整个执行过程(在程序一次执行的整个过程中,DataSettings只执行一次实例化操作,可以在一定程度上提升程序性能);如果通过相对路径字符串在服务器启动项中没有找到该文件,则根据相对路径字符串新建该文件,同时把DataSettings实例中存储的与数据库连接相关的基本信息,以json格式持久化保存到该文件中。
0014、IRepository、EfRepository
IRepository接口和EfRepository类是通过泛型定义,来实现所有的实体类都可以使用EfRepository类中定义的方法来调用数据库上下文实例,通过数据库上下文实例调用EFCore中间件中定义的CURD方法,让程序中所有的实体实例能够与相应数据库中的表中的行进行数据交互操作。
对第四章所有功能更为具体实现和注释见:21-05-17_Nop4.4(007_获取或持久化基本数据库连接信息通过使用EFCore5中间件来自定义实现CURD操作,默认被正常启动)。