一般的なプロジェクトの設計法とフレームモード(シンプル工場)

著作権:著作権:@@個々のすべてのhttps://blog.csdn.net/y20_20/article/details/90812877

はじめに:シンプルなプラントの設計とパターンの枠組みを構築するために使用##開発プロジェクト

コンテンツディレクトリ

アーキテクチャ
2、フレーム
3は、インタフェースが使用して
4つの簡単な工場のデザインパターンを

入門

まず、アーキテクチャ

1.アーキテクチャ:通常、別の観点から、ソフトウェアの研究及び設計する
2を、分類構造:

  1. 論理アーキテクチャ:反応は、ソフトウェアおよびその他の関係からなる優れたコア・アーキテクチャとモジュラー設計することができ
  2. テクニカルアーキテクチャ:ロジックアーキテクチャの設計と開発のアーキテクチャに従って
  3. 物理的なインフラストラクチャ:どのように主要なプロジェクトの展開

第二に、フレームワーク

図1に示すように、フレームワーク:技術的なアーキテクチャは、一般に、主にプロジェクト全体の構造組成を解決するために、フレームワークを使用します。たとえば、次のようにJavaのSSHフレームワーク、3層設計、MVCなどの.NETフレームワーク
2、3層のフレームワーク:

  1. 物理層(モデル):カプセル化およびデータ転送
  2. データアクセス層(DAL):一般的なデータアクセスクラス(特殊工具ユニバーサルデータアクセス、ファイルアクセス)や一般的なデータアクセスクラスに分け
  3. ビジネスロジック層(BLL):ビジネス・ロジック、アルゴリズム、およびデータ転送をカプセル化
  4. UI層:
    (1)、CS手順:Winフォーム、WPF
    (2)、Webプログラム:Webフォーム、MVC
    (3)、WEBサービス:WCF、Webサービス、webapi2
  5. そこABP、またはカスタムフレームワーク

第三に、インタフェースの使用

図1は、モジュールデカップリングインタフェース設計パターンと良好コア使用して
2を、インタフェースデザイン:、公害問題インタフェースにつながる、インターフェース設計が小さすぎることができない分離インターフェースの原理に従って、可能な限り小さく設計されたインターフェースは、ユニバーサル・インターフェースを設計することができません
3、インタフェースを使用する利点:チーム開発を容易にするため、転送プロジェクトの安定性との間のインターフェースを維持しながら、

第四に、デザインパターン(シンプルファクトリー)

1、デザインパターン:プログラム隆起特定の問題に対処することによって、この問題はフレームワークの任意の部分で発生する可能性があり
、単純な分類2デザインパターン:

  1. タイプの作成:作成した問題(単利、シンプルな植物、抽象工場を)解決するオブジェクト
  2. 構造の
  3. 行動

3、オブジェクトの作成に関する問題:

  1. いくつかは、いくつか作成し、GCは、オブジェクトの破壊を担当してください
  2. 作成された遅延:一般的なアプリケーションのステージは、いくつかの方法で呼び出すだけでなく、自分自身のフレームワークとサードパーティのエージェントの完了を書きます
  3. ポリモーフィック特性が反映:後継者を作成するために、複数の直接オブジェクト、オブジェクトを作成することはできません、ユーザーが行動を通じて呼び出すことができ、そして第二に、オブジェクトを作成する方法の詳細については気にしません

4、簡単な工場:

  1. 問題を解決するための簡単な工場は、単一のオブジェクトを作成することです
  2. アプリケーション:そこに使用されるオブジェクトの異なるバリエーションが、ある変化の複数をカプセル化する必要がある、植物を返すために単に使用されてもよい特定のオブジェクトのケースを必要
  3. 注:デザインパターンは、典型的には、インターフェースを必要
  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>

ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/y20_20/article/details/90812877