1.2.2 课题实现方式
(1) 数据层与数据库方面
本毕业设计中使用Entity Framework6.0来实现程序数据持久化,具体使用EF ModelFirst 的方式在Visual Studio中使用NuGet程序包管理器向数据库直接建立表结构。E-F模式其是ORM技术的一种,对象-关系映射ORM(Object-Realation Mapping),创建一个实体数据模型(Entity Data Model[EDM]),使用EDM可以完成实体类的自定义和数据表之间联系的对应建立,关系数据库里的数据被以一个个分离或者关联的对象形式表现极大地支撑了开发人员通过对概念性应用程序模型编程(而不是直接对关系存储架构编程)来创建数据访问应用程序[1]。把数据主体写成类来表示,把数据关系写成类中属性的包含,使用约束来对属性的限制和定义就如同以往在建立表时对于列进行约束一样,并且它可操作的内容和形式却超出以往对于列的操作,在代码中间添加注释也可以极大地增强维护性,哪怕是缺失数字字典的情况下,由于它构造的特点符合人的构思方式,所以也便于理解。这一做法以降低面向数据的应用程序所需的代码量并减轻维护工作为目标。然而EF也有一定的局限性,EF在面对多对多关系中简化了人的维护负担,它被设计成自动维护中间表。而开发人员也无法操作该表的内容只能对这种关系进行描述,这一点再某些业务的实现上就显得不合理。但总体而言Entity Framework 应用程序有以下优点:
开发人员可以使用可映射到各种存储架构(可能在不同的数据库管理系统中实现)的一致的应用程序对象模型,之前的模式中数据库类型和程序特别紧密,若是使用SQL Server数据库那么就需要在DAL层引入SQL类库,使用Oracle是则需要把之前的SQL类库用Oracle类库替换掉,无法适应多种数据库并用的情况。
语言集成查询支持可为查询提供针对概念性模型的编译时语法验证,因为编译器会对类的使用进行检查而这种检查在使用ORM之后对类的检查实际上是对数据查询的隐式检查。
应用程序可以通过更加以应用程序为中心的概念性模型(包括具有继承性、复杂成员和关系的类型)来工作。
应用程序对特定的数据引擎或存储架构的硬编码依赖性大大降低,之前由于大量sql语句使得程序和数据库之间的耦合性很紧密。
可以在不更改应用程序代码的情况下更改概念性模型与特定于存储的架构之间的映射。
多个概念性模型可以映射到同一个存储架构。
(2) 应用缓存的实现
考虑到数据是贯穿整个程序的主体,如果使用传统的开发方式,那么需要在每次的数据库查询、更新、删除方面都需要写一部分与缓存相关联的代码,这样过于繁琐,所以在本次课题中,处理这个问题运用的是面向切面编程——AOP(Aspect Oriented Programming),是一种能统一维护、通过预编译方式和运行期动态代理实现程序功能技术。AOP是OOP的延续,是软件开发中的一个热点。
在这里,介绍一部分相关的概念:关注点(Concerns)在系统软件中那些需要被解决的问题,亦或是一块受开发者关注的、感兴趣的内容往往体现为一部分的逻辑流程。软件业务系统中要解决的问题使核心关注点(Core Concerns)它由软件系统的业务功能组成,而诸如日志记录,事物处理等关注点就形成了(Crosscutting Concerns )横切关注点它一般会出现在几个甚至是所有的功能里面,如果对于横切关注点用一维的方法去实现将会遇到难题如前所述,软件系统中非业务功能实现的代码无法模块化(模块与模块之间耦合有重复交叠的情况)、功能的实现散布在整个实现业务功能的代码中(日后维护的方面被扩散并且哪怕是制作者也难以明确其影响边界)这两点体现了传统编程技术中造成代码纠结的症结,是主要的造成原因。在处理验证、统计、权限、异常控制等方面的业务最能够体现这一类的麻烦。因为,这些散布在核心关注点中关注点,是横切的关系相互形成的体现,其意义简要地说就是让面向对象编程是关注将需求功能划分为不同的并且相对独立,但是能够使一个行为被很多类在共享,很多类不必被修改哪怕是发生变化时,而只需要对这个行为本身进行修改即可。本次设计中针对的切入点就是缓存的读取和写入,当要执行读取的业务逻辑时程序根据配置的拦截接口和方法进行拦截获取查询条件的具体内容这一部分是查询上的难点——如何对于查询条件的解析。检验是否存在相关内容并采取相对于的回馈。同时执行写入的业务逻辑时程序也会拦截相关内容进行解析,但是较之查询其复杂的地方不同,因为数据之间往往是相互关联的,牵一发而动全身,需要对所有的依赖项进行更改并维护缓存内容。一般情况下使用object对象作为函数处理的对象,这也符合向前所说的内容,由于拦截的对象是多种的,事先并不能知晓到底是什么类型作为参数传入了函数中。而查询条件的解析和序列化就是重点难题,首先参数类型并不是事先明确和能提前预计的,其次条件的类型也同样很多例如有:逻辑运算、条件运算