0

私は次のコードを順番に実行し、メソッドを次々と実行します。

リクエストをロードし、このリクエストに対するレスポンスがすでに存在するかどうかを確認するなど、いくつかのチェックを実行します。存在しない場合は、サービスを呼び出して、DB に保存するレスポンスを受け取ります。

そんな時に使えるデザインパターンを探していたので、ここに投稿してアイデアを得ようと思いました。

public class Manager
    {

        public void PutRequest()
        {
            //Do Something

            if (loadRequest())
            {
                  callService(); 

                  //Do Something
                  saveResponse();
            }

        }

        private bool loadRequest()
        {            
             bool isExist = checkIfResponseExists();

             if (!isExist)
             {
              // If false, load request from DB
             } 

             return !isExist;

        }

        private bool checkIfDataExists()
        {
            //Check if a response already exists in the DB for this request
        }

        private void callService()
        {
            //Call the service and receive the response
        }    

        private void saveResponse()
        {
            //Store the response in the DB
        }

    }
4

5 に答える 5

1

パターンは、いくつかの問題を解決するために使用されます。現在のコードにはどのような問題がありますか? メソッドの名前以外に、重複したコードはありません。メソッドの命名の問題を修正するパターンはありません。

はい、コードにはリファクタリングが必要ですが、パターンには必要ありません。クラスとメソッドの命名を改善することが最初のステップです。また、 field を削除しましisExistた。

public class Manager
{
   public void PutRequest()
   {
       //Do Something
       if (!CheckIfResponseExists()) // returns boolean value
            LoadRequestFromDB()

        CallService(); 
        //Do Something
        SaveResponse();
   }
}
于 2012-10-30T21:59:23.713 に答える
0

コマンド + コンポジット。

一部の人々は、コンポジットでの if/then コマンド (あなたの場合は putRequest に含まれる) の使用を一種の責任の連鎖と考えています。

于 2012-10-31T07:59:53.260 に答える
0

パターンを選択するときは、アプリケーションのスケーラビリティを考慮する必要があります

適用できるパターンの 1 つに状態パターンがあります

2つの状態になります。

  1. レスポンスはすでにあります
  2. 新しい応答を処理する必要がある
于 2012-10-31T09:11:52.203 に答える
0

Strategy と呼ばれる設計パターンを確認してください。サポートされているすべてのアルゴリズムに共通のインターフェイスが定義されており、各具体的な戦略はアルゴリズムを実装しています。

http://www.oodesign.com/strategy-pattern.html

于 2012-10-30T22:02:26.363 に答える
0

これらのメソッドのいくつかを関数にした方が便利なようです。したがって、条件のチェックと他のアクションの実行の両方を担当するメソッドを持つ代わりに、条件をチェックし、それを呼び出したメソッドが結果に応じて何らかのアクションを実行する関数があります。(メソッドに適用されるSRPの種類...)

public void DoAllTheThings!() // Oops, Ruby syntax creeping in :P
{
   if(!WeCanDoIt())
   {
     MakeItSo(); // So that we can do it...
   }

   NowWeCanDoAllTheThings();
}

private bool WeCanDoIt() {}
private void MakeItSo() {}
private void NowWeCanDoAllTheThings() {}
于 2012-10-30T22:06:15.410 に答える