【前言】
上一篇博客和大家分享了抽象工厂在实践管理系统时能为我们带来的好处,同时也给大家提了抽象模式更改DB的几个问题,那么增加功能时有什么方法不需要更改添加那么多类呢? 换数据库的时候可不可以不更改程序呢? 下面分享下简单工厂+抽象工厂+反射+配置文件下的“换DB”。
【正文】
【demo类图】
【demo代码实践】
using System;
using System.Reflection;
using System.Configuration ; //引用configruaiton 让程序可以读取配置文件
namespace System {
public class DataAccess {
private static readonly string DB = ConfigurationManager.AppSettings["DB"]; //static 设置成静态全局变量,在其它层中也可使用
//readonly 使它无法在方法中被更改, 只能在反射文件中更改
private static readonly string AssemblyName = "System"; //用两个string变量拼出实体类的名字
public DataAccess()
{
}
~DataAccess(){
}
public virtual void Dispose(){
}
public IDepartment CreateDepartment()
{
string ClassName = AssemblyName + "." + DB + "Department";
return (IDepartment )Assembly.Load (AssemblyName ).CreateInstance (ClassName );
}
public IUser CreateUser(){
string ClassName = AssemblyName + "." + DB + "User";
return (IUser )Assembly .Load (AssemblyName).CreateInstance (ClassName ); //这里程序集生成的dll文件必须在bin文件夹下
}
}//end DataAccess
}//end namespace System
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key ="DB" value ="Sqlserver"/>
</appSettings>
</configuration>
其他的代码和上一篇没有变化。。
【优点】
通过配置文件的使用,再换DB的时候只要在配置文件中更改一下字符串就可以了。不用重新编译程序了。增加功能也要比抽象工厂方便的多。
【总结】
设计模式不是一成不变的死板套路而是可以灵活变通组合的一些编程思想,学习设计模式最基础的是要把他们的基本代码适用情况记住, 但最高级的,却是要把他们都忘掉。 向着架构师的目标冲刺~~~