C#デザインパターン:リフレクション+抽象ファクトリパターンの構成ファイル
反射
これは、newを渡さずにオブジェクトを取得する方法です。
文字列を使用してオブジェクトをインスタンス化し、変数を置き換えることができるため、スイッチの判断の手間が省けます。
1つ目は、リフレクション+抽象ファクトリ(データアクセスプログラム)のコード構造図です。
抽象ファクトリパターンのコード構造図と比較できます
DataAccessクラスは、リフレクションテクノロジーを使用して、IFactory、SqlSeverFactory、AccessFactoryを置き換えます。
では、どのようにリフレクションを書きますか?
以下は、コードの比較です。
//常规的写法
IUser result= new SqlseverUser();
//反射的写法
using System.Reflection ;
//先引用System.Reflection的命名空间
IUser result = (IUser) Assembly .Load ("当前'程序集'的名称").CreateInstance ("当前'命名空间'名称.SqlseverUser")
//SqlseverUser是要实例化的类名
ビッグトークデザインパターンの抽象ファクトリパターンの特定のコードは次のとおりです。
using System.Reflection ;//引入反射
class DataAccess
{
private static readonly string AssemblyName = "抽象工厂模式";//程序集名称
private static readonly string db = "Sqlserver";//数据库名称,可替换
public static IUser CreateUser()
{
string className = AssemblyName + "." + db + "User";
return (IUser)Assembly .Load (AssemblyName).CreateInstance
(className);
}
public static IDepartment CreateDepartment()
{
string className = AssemblyName + "." + db + "Department";
return (IDepartment)Assembly .Load (AssemblyName).CreateInstance
(className);
}
Oracleデータアクセスを増やす必要がある場合は、コードを1文だけ変更する必要があります。
IUser result = (IUser) Assembly .Load ("当前'程序集'的名称").CreateInstance ("当前'命名空间'名称".OracleUser);
もちろん、データベースアクセスを変更するときは、プログラムを変更する(db文字列の値を変更する)必要があります。構成ファイルを使用して、DataAccessの変更の問題を解決できます。
この構成ファイルのブログの要約は非常に包括的です:https://blog.csdn.net/lovelion/article/details/7430414
構成ファイルとは:
XMLドキュメントは、特定のクラスのクラス名を格納するために使用される構成ファイルです。ここでは、XML形式の構成ファイルを追加するだけで済みます。
構成ファイルはU層に書き込まれます。
コードは次のように表示されます。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="DB" value="Sqlserver"/>
//在此添加我们需要的key 与value
</appSettings>
</configuration>
構成ファイルの読み取り
//在程序开头添加引用
using System.Configuration
private static readonly string db = ConfigurationManager.AppSetting["DB"]