2011-08-12 11 views
2

現時点では、私のウェブサイトには仕様パターンのあるリポジトリパターンがあります。私は、コード、例のほんの数行で私の.aspxページ内からデータを取得することができます。Entity Framework - ビジネス層の必要性に関する意見

private IRepository repository; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     repository = new GenericRepository(); 

     Specification<Book> specification = new Specification<Book>(b => b.Year == 1988); 
     lvBooks.DataSource = repository.GetAll<Book>(specification); 
     lvBooks.DataBind(); 
    } 

今、私は私のウェブサイトに、あなたの答えはイエスであれば、ビジネス層を必要としないさ、私の質問は、なぜ? 現時点では、仕様パターンのために、ページとリポジトリの間にあるビジネス層は必要ないと思われます。

ご意見ありがとうございます。

答えて

3

このアプリケーションの大きさには、どの程度の大きさがあるかによって決まりますどのくらい変化する可能性があるのか​​を示します。

どのレイヤーの唯一の本当のポイントは、機能性を分離することです。小さなアプリケーションでは、UIコード全体に散在しているリポジトリを呼び出すことができます。

しかし、リポジトリの構造の中で何かを変更するとどうなりますか?これらのすべての参照を見つけて変更する必要があります。

しかし、より高レベルのメソッドをUIに公開するビジネスレイヤーにすべてのリポジトリアクセスコードを書き込んだ場合、この時点で行う作業ははるかに少なくなります。

セキュリティに関する特別な考慮事項があります。たとえば、UIにリポジトリへのアクセス権がない場合は、すべてのセキュリティチェックをビジネスレイヤのパブリックAPIに集中できます。リポジトリにどこからでもアクセスできる200ページのWebアプリケーションがあれば、もちろんセキュアにできますが、どれくらいのことができますか?

ユニットテストがあります...基本的には正しい方法はありませんが、あなたのアプリが小さい場合は問題ありません。アプリが大規模な場合は、おそらくこのデザインを後悔するつもりですポイント。

+0

最終的に大きなサイトになるので、BLLを作成するといいでしょうか?この仕様リポジトリでビジネス層をどのように見えるようにする必要がありますか? (私のリポジトリは汎用的で、データベースは30以上のテーブルになっていますので、すべてのエンティティにビジネスオブジェクトを書く必要がありますか? – Julian

+0

非常に難しい質問です!UIを忘れてリポジトリが存在します。リポジトリがうまく設計されていれば、このAPIを簡単にサポートできるはずです - リポジトリを変更したくない場合は、このAPIを利用するためのUIを記述してください。特定のUI要件をサポートするためにAPIにいくつかの追加のメソッドを追加する必要があるかもしれませんが、もしできれば...この件に関して数え切れないほどの本が書かれていることを避けてください...それは6行でできることです。 –

+0

ハハ、ありがとう。ジェネリックリポジトリに良いBLLを構築する作業があれば、この作業を行う方法はあると思いますが(一般BLLは特定のエンティティのためのメソッドを持つことができないので、) – Julian

1

あなたのコードから、あなたはビジネス層が必要ないと思われます。シンプルな仕様を使用してデータを取得するか、データを挿入するかのように思えます。例:オブジェクトを削除すると、オブジェクトを削除する前に特定の条件をチェックする必要があります。

+0

本当にありがとうございます。オブジェクトを削除するかどうかについての実際のルールはありません。しかし、リポジトリと直接話し合っても、セキュリティ上の問題などがありますか? – Julian

+0

私はそこに "セキュリティ上の問題"はないと思うのですが、その間に追加層のオーバーヘッドがなく単純なコードになっています – Ankur

+0

あなたの議論のおかげで論理的だと思うAnkur、私はいくつかの意見を待っています私はまだその答えを受け入れません。ありがとう! – Julian

関連する問題