9つのキャンプ.NETコードのためのステップの再構築の研究ノートバイステップ

復興研究では、すべてのステップ.NETコードでシリーズノート

すべてのステップ.NETの研究では、リファクタリング、なぜリファクタリングノート

すべてのステップの.NETリファクタリングの研究では、セカンドノート精製方法(メソッドの抽出)

再構成ステップの研究は、三インライン法(インライン方式)の操作のための.NETコードをノート

ステップ復興研究によるステップは、4つの一時変数キャンプ.NETコード(一時変数)を指摘します

.NETすべてのステップ5の研究ノートをリファクタリングし、機能置換アルゴリズムを分解(方法と代替アルゴリズムを交換してください)

.NET各ステップ6研究ノート、運動機能および運動範囲をリファクタリング(メソッドを移動して項目を移動)

すべてのステップ.NETコードのリファクタリングの研究では、7ノート

ステップ復興研究によるステップは、キャンプの.NETコードのための8ノート

 

 

、重複は、観測データ(コピー[監視対象データ])

モチベーション(動機)

ドメインオブジェクトのペンにデータをコピーします。観察者は、GUIオブジェクトと同期制御(同期)内のドメインオブジェクトの複製のためのパターンを確立します。

キャンプ.NETのデザインパターンのためのステップの研究ノート、オブザーバー(Observerパターン)によって十二のステップ

 

二、双方向への変更単方向協会(協会が変更一方向に双方向)

モチベーション(動機)

(改質剤)抗ポインタを追加すること、および機能を変更する2つの更新に同時に接続することができます。

    public class Order
    {
        private Customer _customer;

        public Customer NewCustomer
        {
            get { return _customer; }
            set { _customer = value; }
        }
    }

    public class Customer
    {
    }

 

変更

   public class Order
    {
        public List<Customer> CustomerList = new List<Customer>();

        public void AddCustomer(Customer arg)
        {
            arg.orderlist.Add(this);
            CustomerList.Add(arg);
        }

        public void RemoveCustomer(Customer arg)
        {
            arg.orderlist.Remove(this);
            CustomerList.Remove(arg);
        }
    }

    public class Customer
    {
        public List<Order> orderlist = new List<Order>();
        public void AddOrder(Order arg)
        {
            arg.CustomerList.Add(this);
            orderlist.Add(arg);
        }
        public void RemoveOrder(Order arg)
        {
            arg.CustomerList.Remove(this);
            orderlist.Remove(arg);
        }
    }

 

 

三、単方向への変更双方向協会(双方向一方向に変更)

モチベーション(動機)

二つのクラス、1クラスが、今はもう別のクラスの特性を必要としない間の双方向の関連付けがあります。

public class Order
    {
        public List<Customer> CustomerList = new List<Customer>();

        public void AddCustomer(Customer arg)
        {
            arg.orderlist.Add(this);
            CustomerList.Add(arg);
        }

        public void RemoveCustomer(Customer arg)
        {
            arg.orderlist.Remove(this);
            CustomerList.Remove(arg);
        }
    }

    public class Customer
    {
        public List<Order> orderlist = new List<Order>();
        public void AddOrder(Order arg)
        {
            arg.CustomerList.Add(this);
            orderlist.Add(arg);
        }
        public void RemoveOrder(Order arg)
        {
            arg.CustomerList.Remove(this);
            orderlist.Remove(arg);
        }
    }

 

 

変更

    public class Order
    {
        private Customer _customer;

        public Customer NewCustomer
        {
            get { return _customer; }
            set { _customer = value; }
        }
    }

    public class Customer
    {
    }

 

 

四、シンボリック定数とマジックナンバーを交換してください(定数シンボル/リテラル​​はホーチミンマジックナンバーをフェッチ)

モチベーション(動機)

それに名前を付けて、この定数の上記のリテラル値を置き換えるために、その重要性に応じて、定数を作成します。

        public double PotentialEnergy(double mass, double height)
        {
            return mass * 9.51 * height;
        }

 

 

変更

        private double GRAVITATIONAL_CONSTANT = 9.51;
        public double PotentialEnergy(double mass, double height)
        {
            return mass * GRAVITATIONAL_CONSTANT * height;
        }

 

 

 

五、カプセル化フィールド(カプセル化されたウィンドウ)

モチベーション(動機)

(アクセサ)プライベートとしてそれを宣言し、アクセス機能を提供

public string _name;

 

 

変更

        private  string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

 

 

六、(置換のクラスに入力したコード)クラスでタイプコードを交換してください

モチベーション(動機)

入力された数値コード(タイプコード)を置き換えるために、新しいクラス

    public class Person
    {
        public  int O = 0;
        public  int A = 1;
        public  int B = 2;
        public  int AB = 3;

        private int _bloodGroup;

        public Person(int bloodGroup)
        {
            _bloodGroup = bloodGroup;
        }
        public int NewBloodGroup
        {
            get { return _bloodGroup; }
            set { _bloodGroup = value; }
        }
    }

 

変更

 public class Person
    {
        public int O = BloodGroup.O.Code;
        public int A = BloodGroup.A.Code;
        public int B = BloodGroup.B.Code;
        public int AB = BloodGroup.AB.Code;


        private int _bloodGroup;

        public Person(int bloodGroup)
        {
            _bloodGroup = bloodGroup;
        }

        public int NewBloodGroup
        {
            get { return _bloodGroup; }
            set { _bloodGroup = value; }
        }
    }

    public class BloodGroup
    {
        public static BloodGroup O = new BloodGroup(0);
        public static BloodGroup A = new BloodGroup(1);
        public static BloodGroup B = new BloodGroup(2);
        public static BloodGroup AB = new BloodGroup(3);

        private int _code;

        private BloodGroup(int code)
        {
            _code = code;
        }

        public int Code
        {
            get { return _code; }
            set { _code = value; }
        }

    }

ます。https://www.cnblogs.com/springyangwc/archive/2011/05/30/2063832.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34204057/article/details/93340910