引言
在项目开发中,数据库的更换是需要考虑的问题,不同的数据库有着不同的访问方式,不同的SQL语法。恐怕最让人头疼的是项目开发完了,用户提出了更换数据库的要求,修改并不是一件容易的事儿。那么如何应对修改,本文将通过三层架构+抽象工厂+反射+配置文件结合实例讲述数据库的更换。
概念
三层架构
三层架构即在软件架构中,将整个业务应用划分为:界面层(User Interface Layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data Access Layer)。
具体内容可以参考我的另一篇关于三层架构的文章:http://blog.csdn.net/u013201439/article/details/50704816
抽象工厂
抽象工厂(Abstract Factory)是设计模式中的一种:
它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
具体内容参见【设计模式】工厂三模式(创建型):http://blog.csdn.net/u013201439/article/details/50488009
反射
反射提供了描述程序集、模块和类型的对象( Type 类型)。 可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了特性,可以利用反射来访问它们。
简单的来讲,就是传入所需类的字符串,然后返回这个类的实例。
配置文件
配置文件为开发人员和管理员提供了对应用程序运行方式的控制权和灵活性。配置文件是可以按需要更改的 XML文件。管理员能够控制应用程序可以访问哪些受保护的资源,应用程序将使用哪些版本的程序集,以及远程应用程序和对象位于何处。开发人员可以将设置置于配置文件中,从而没有必要在每次设置更改时重新编译应用程序。
简单理解就是将软件中容易修改的内容保存到配置文件中,需要修改时,只需要修改配置文件的内容,而无需修改程序本身,重新编译。
实现
为了加深理解,将上述这些应用到实例项目中,来实例分析,以机房收费系统为例。
在项目开始之前,先通过一张包图理清各层之间的关系。
实例为实现显示用户信息功能,上图中还添加了“外观模式”,不是本文讨论的重点,大家忽略就可以了。
实体层:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JFEntity
{
public class UserInfo
{
public int userID {