2009-04-23 35 views
4

ための方法を確認して呼び出すためのパターンが必要:、私は次のコードを持っているすべてのインスタンスメソッドパターン

class Foo 
{ 
    public Foo() 
    { 
     Size = true; 
    } 

    private bool _size; 

    protected bool Size 
    { 
     get { _size; } 
     set { _size = value; } 
    } 
} 

class CrazyFoo : Foo 
{ 
    public void First() 
    { 
     if (!Size) 
      return; 
    } 

    public void Second() 
    { 
     if (!Size) 
      return; 
    } 
    public void Finished() 
    { 
     if (!Size) 
      return; 
    } 
} 

それは

を入力して、私はナッツドライブとして、パターンのこの種を実施するための最良の方法は何を
if(!Size) return; 

おそらく私は属性やAOPでそれを行うことができますか?

最も簡単で簡単な方法は何ですか?

おかげ値で

答えて

0

「パターン」の観点からは、これは私にとっては面倒ではないようです。

if(!Size) 
    return; 

あなたは明示的に必要なケースを処理しています。あなたのケースでは、このチェックはあなたが作業しているもの、つまり元の+編集内容からわかるものからかなり特定しています。私は個人的にもっと明白な名前を選んでいます。なぜなら、それはちょっと変わったように思えます(あなたのオリジナルであっても)。

AOPを使用していても、各方法で他の情報を追加して、アスペクトが処理されていることを確認してください。

0

たぶんただ一つの方法を使用して、列挙型FirstSecondなどFinished?その1つの小切手とは別に、あなたは何が共通しているかを言わないので、伝えるのは難しいです。アスペクトは解決策になる可能性がありますが、アスペクトは概念的な性質のため一般により一般的ですからです。

ところで、将来的にサンプルに別の名前を付けると、これは一部の人々を怒らせる可能性があります。 (新しい命名と一致するように編集)

1

あなたはあまりにも多くの方法の初めに同じガード文を持っている場合、あなたはexecuteWithGuardというメソッドを作成することができます。

private void executeWithGuard(Action method) 
{ 
    if (HeadSize) method(); 
} 

あなたがこれを行うことができその後:

public void ScreenFirstShot() 
{ 
    executeWithGuard(() => 
    { 
     // code here 
    }); 
} 

public void ScreenSecondShot() 
{ 
    ExecuteWithGuard(() => 
    { 
     // code here 
    }); 
} 
public void CrazyUp() 
{ 
    ExecuteWithGuard(() => 
    { 
     // code here 
    }); 
} 

を劣らありますこれを行うコード...実際にはもっとコードがあるかもしれませんが、あなたのガード条件が変わった場合に検索/置換をする必要はありません。私は最後の手段としてそれを提案したいと思います。あなたの本当の問題は、あなたがコールツリーのあまりにも遠すぎてあなたの検証をしているということです。あなたがより高いレベルでそれを行うことができれば、あなたはこの妥当性検査のすべてから身を守ることができます。

ALSO

null object pattternを見てください。このパターンは、状態チェックを防止または簡素化するために、特殊な場合に使用できます。 ALSO

(REV 2)

それは質問は、特定のソリューションに焦点を当てているので、あなたの意図が何であるかを知ることは難しいですが、あなたは順次これらのメソッドを実行している場合、あなたはstrategy patternを使用して見ることができ、小切手をあなたの基本戦略クラスに入れます。

関連する問題