2012-01-05 4 views
6

私はすでにうまく機能するレイヤードデータアクセス設計を持っています。しかし、それが最も適切な実装かどうかわかりません。
BLLのクラスやメトトが静的であるべきか、インスタンスが1つしかないクラスを作成する必要があることを知りたいだけですか?
そのようなSOA設計でBLLクラスを使用するには、私はその間にBLLクラスをシリアライズする必要はありません。しかし、私は機能がもたらすものは分かりません。次のオプションで
ルック:
BLLクラスをスタティックまたは?

  1. BLLクラスとmethotsは静的
  2. BLLクラスは静的ではありませんされているが、そのmethotsは静的
  3. BLLクラスは、静的もそのmethotsではありませんされています。アプリケーションは、そのメトトにアクセスするたびに、毎回BLLクラスを作成する必要があります。
  4. BLLクラスは静的でもメトールでもありません。しかし、各BLLクラスのインスタンスは1つだけです。そして、アプリケーションは、BLLメトトを使用するためにこれらの静的インスタンスをinorderで使用します。

パフォーマンスとデザインで最も効果的なのはどちらですか?

EDIT:

オプション1

public static class BllCustomer 
{ 
    public static List<ModelCustomer> GetCustomers() 
    { 

    } 
} 

// usage 
BllCustomer.GetCustomers(); 

オプション2

public class BllCustomer 
{ 
    public static List<ModelCustomer> GetCustomers() 
    { 

    } 
} 

// usage 
BllCustomer.GetCustomers(); 

オプション3

あなたのドメイン層は、一般的にあなたのビジネスルールや複雑な処理ロジックを保持しているとして、あなたのドメイン/ BusinessLogicLayerクラスをシリアル化
public class BllCustomer 
{ 
    public List<ModelCustomer> GetCustomers() 
    { 

    } 
} 

// usage 
BllCustomer bllCustomer = new BllCustomer(); 
bllCustomer.GetCustomers(); 

オプション4

public class BllCustomer 
{ 
    public List<ModelCustomer> GetCustomer() 
    { 

    } 
} 

// usage 
public static BllCustomer s_BllCustomer = new BllCustomer(); 
// whenever needed 
s_BllCustomer.GetCustomer(); 
+0

なぜ人々はこの問題に対して意見を述べないと主張するのですか、私は単に理解できません。おそらく、彼らは他の多くの質問でこのトピックを見ることができません。はい、私は自分自身に話しています。あなたの意見に感謝します。 – Fer

答えて

1

は少し珍しいですね。通常、DataTransformation/POCOクラスをシリアル化する必要があります。

静的または具象のクラス/メソッドの間には、わずかな差異があります。performance私は静的なクラスやメソッドを主なビジネスロジックとして恥ずかしがりますが、単体テストや単体テストは難しく、IoCコンテナでは動作しません。このことを念頭に置いて、私はあなたがそれを説明したので、オプション3をお勧めします。また、非常に有用な回答がhereと掲載されています。

+0

オプション4についてどう思いますか? – Fer

+0

質問を読んで私が最初に考えたことは、嘲笑の問題でした。 UpoppedとIoCコンテナに関する情報 – Mike

0

パフォーマンスと使いやすさのために、オプション2が最も理にかなっています。私は現在オプション2を使用しており、問題に遭遇していません。それらのほとんどは、DALを呼び出す行とlog4netでログを記録する行を含んでいます。彼らのほとんどはビジネスロジックを持っていません。

私はASP.NETでこれを使用しています。

+0

あなたはオプション2を選択すると言った。オプション1とオプション2の違いについてどう思いますか?それらは使いやすく静的です。なぜオプション1を選択しないのですか? – Fer

+0

私はオプション1を使用しません。静的クラスでは、すべてのメンバーが静的でなければなりません。静的クラスではなく静的メンバーで非静的クラスを持つ方が一般的です。オプション2を使用してインスタンスを作成することはできますが、オプション1を使用して静的クラスでスタックしています。最も簡単なものに進みます。また、オプション1/2は単体テストには理想的ではありませんが、そのような方法があまりない場合は、単体テストは必要ありません。私のロジックのほとんどはストアドプロシージャに依存しています。 –

0

私は個人的にこれらの技術をたくさん使ってシステムを構築しました。結局のところ、最も単純なテクニックは実際には最も柔軟だったので、私はあまりにも巧妙であることを認識していたはずです。静的なものを作るのが誘惑されているのであれば、それは仕事が少なく、「効率的です」と感じるので、間違った理由でそれをやっています。

クラスまたはメソッドを静的にしないことをお勧めします。なぜなら、DDDやDependency Injection(IoC)などのパターンは非常に貴重なものになっているからです。たとえば、このBLLを使用するWebサイトやアプリケーションコードをテストするにはどうすればよいでしょうか?通常、あなたはBLLを模擬して予測可能な結果を​​返すようにしたいでしょう。 Staticクラスでこれを行うのは苦労します。

関連する問題