はじめに:シンプルなプラントの設計とパターンの枠組みを構築するために使用##開発プロジェクト
コンテンツディレクトリ
アーキテクチャ
2、フレーム
3は、インタフェースが使用して
4つの簡単な工場のデザインパターンを
入門
まず、アーキテクチャ
1.アーキテクチャ:通常、別の観点から、ソフトウェアの研究及び設計する
2を、分類構造:
- 論理アーキテクチャ:反応は、ソフトウェアおよびその他の関係からなる優れたコア・アーキテクチャとモジュラー設計することができ
- テクニカルアーキテクチャ:ロジックアーキテクチャの設計と開発のアーキテクチャに従って
- 物理的なインフラストラクチャ:どのように主要なプロジェクトの展開
第二に、フレームワーク
図1に示すように、フレームワーク:技術的なアーキテクチャは、一般に、主にプロジェクト全体の構造組成を解決するために、フレームワークを使用します。たとえば、次のようにJavaのSSHフレームワーク、3層設計、MVCなどの.NETフレームワーク
2、3層のフレームワーク:
- 物理層(モデル):カプセル化およびデータ転送
- データアクセス層(DAL):一般的なデータアクセスクラス(特殊工具ユニバーサルデータアクセス、ファイルアクセス)や一般的なデータアクセスクラスに分け
- ビジネスロジック層(BLL):ビジネス・ロジック、アルゴリズム、およびデータ転送をカプセル化
- UI層:
(1)、CS手順:Winフォーム、WPF
(2)、Webプログラム:Webフォーム、MVC
(3)、WEBサービス:WCF、Webサービス、webapi2 - そこABP、またはカスタムフレームワーク
第三に、インタフェースの使用
図1は、モジュールデカップリングインタフェース設計パターンと良好コア使用して
2を、インタフェースデザイン:、公害問題インタフェースにつながる、インターフェース設計が小さすぎることができない分離インターフェースの原理に従って、可能な限り小さく設計されたインターフェースは、ユニバーサル・インターフェースを設計することができません
3、インタフェースを使用する利点:チーム開発を容易にするため、転送プロジェクトの安定性との間のインターフェースを維持しながら、
第四に、デザインパターン(シンプルファクトリー)
1、デザインパターン:プログラム隆起特定の問題に対処することによって、この問題はフレームワークの任意の部分で発生する可能性があり
、単純な分類2デザインパターン:
- タイプの作成:作成した問題(単利、シンプルな植物、抽象工場を)解決するオブジェクト
- 構造の
- 行動
3、オブジェクトの作成に関する問題:
- いくつかは、いくつか作成し、GCは、オブジェクトの破壊を担当してください
- 作成された遅延:一般的なアプリケーションのステージは、いくつかの方法で呼び出すだけでなく、自分自身のフレームワークとサードパーティのエージェントの完了を書きます
- ポリモーフィック特性が反映:後継者を作成するために、複数の直接オブジェクト、オブジェクトを作成することはできません、ユーザーが行動を通じて呼び出すことができ、そして第二に、オブジェクトを作成する方法の詳細については気にしません
4、簡単な工場:
- 問題を解決するための簡単な工場は、単一のオブジェクトを作成することです
- アプリケーション:そこに使用されるオブジェクトの異なるバリエーションが、ある変化の複数をカプセル化する必要がある、植物を返すために単に使用されてもよい特定のオブジェクトのケースを必要
- 注:デザインパターンは、典型的には、インターフェースを必要
- インターフェイスの役割:制約と拡張
5、工場コード単純な例
最初の方法は、いくつかのオブジェクトが複数のオブジェクトを作成が必要です。
IDataExport dataPort = new ExcelImport(); //这样做只起到约束作用,这样使用接口意义不大
IDataExport dataPort = new JsonImport();
//第一种方法:以上为创建多个对象
作成した通知方法を提供する2番目の方法
private string type = ConfigurationManager.AppSettings["objectType"].ToString();//获取通知
/// <summary>
/// 对象创建的方法需要提供一个对象创建的通知,这个通知放到App.config中
/// </summary>
/// <returns></returns>
public IDataExport CreateObjcet()
{
// 在这个地方如果需求变化,还得修改代码,没有根本解决问题
if (type.Equals("ExcelImport"))
{
return new ExcelImport();
}
else if (type.Equals("JsonImport"))
{
return new JsonImport();
}
else
return null;
// 以上步骤为第二种方法:如果添加了对象需求就得更改代码
}
第三の方法は、単純な機能を使用して
第1コンソールプログラムCustomerUI(UI)を作成し、起動するように設定し、2つのアセンブリDataLayerImport(インターフェイスタイプ)を追加し、IBizLayer(インタフェース)
基本的なフレームワーク:
Program.csのクラスコード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入接口和接口实现程序集命名空间
using IBizLayer;
using DataLayerImport;
namespace CustomerUI
{
class Program
{
public static void Main(string[] args)
{
//IDataExport dataPort = new ExcelImport(); //这样做只起到约束作用,这样使用接口意义不大
//IDataExport dataPort = new JsonImport();
//第一种方法:以上为创建多个对象
IDataExport dataPort =new SimpleObjectFactory().CreateObject();//第二种方法延迟创建对象(工厂模式,不知道程序怎么创建的对象)
dataPort.ExecutePort();
dataPort.SaveData();
Console.ReadKey();
}
}
}
ExcelImportクラス(インターフェースクラス)コード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入接口命名
using IBizLayer;
namespace DataLayerImport
{
public class ExcelImport : IBizLayer.IDataExport
{
public bool ExecutePort()
{
//接口实现
Console.WriteLine("excel数据导出");
return true;
}
public int SaveData()
{
Console.WriteLine ("excel数据保存");
return 1;
}
}
}
JsonImportクラス(インターフェースクラス)コード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IBizLayer;
namespace DataLayerImport
{
public class JsonImport:IBizLayer.IDataExport
{
public bool ExecutePort()
{
//接口实现
Console.WriteLine("json数据导出");
return true;
}
public int SaveData()
{
Console.WriteLine("json数据保存");
return 1;
}
}
}
SimpleObjectFactoryシンプルなファクトリクラス(動的に作成されたオブジェクト)コード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入命名空间
using IBizLayer;
using System.Configuration;
using System.Reflection;
namespace DataLayerImport
{
public class SimpleObjectFactory
{
private string type = ConfigurationManager.AppSettings["objectType"].ToString();//获取通知
/// <summary>
/// 对象创建的方法需要提供一个对象创建的通知,这个通知放到App.config中
/// </summary>
/// <returns></returns>
//public IDataExport CreateObjcet()
//{
// // 在这个地方如果需求变化,还得修改代码,没有根本解决问题
// if (type.Equals("ExcelImport"))
// {
// return new ExcelImport();
// }
// else if (type.Equals("JsonImport"))
// {
// return new JsonImport();
// }
// else
// return null;
// // 以上步骤为第二种方法:如果添加了对象需求就得更改代码
//}
//第三种方法,使用反射创建对象
public IDataExport CreateObject()
{
return (IDataExport)Assembly.Load("DataLayerImport").CreateInstance($"DataLayerImport.{type}");//转化为借口类型
}
}
}
インタフェースクラスコードをIDataExport:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IBizLayer
{
public interface IDataExport
{
bool ExecutePort();
int SaveData();
}
}
テストの実行結果:JsonImport文字列を設定したとき、次の結果:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="objectType" value="JsonImport"/>
</appSettings>
</configuration>
2つのテスト実行結果:次のように構成されたExcelImport文字列があるときは:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="objectType" value="ExcelImport"/>
</appSettings>
</configuration>