6

私は小さなアプリケーションを最初から作成し、それを使用してアーキテクチャと設計の概念を自分自身に教えようとしています。これは.NET3.5、WPFアプリケーションであり、データストアとしてSqlCompactEditionを使用しています。

私はビジネスロジック層に取り組んでおり、DALの作成を始めたばかりです。SqlCeComamndsを使用して単純なクエリを送信し、SqlCeResultSetを使用して結果を取得しています。InsertメソッドとUpdateメソッドの設計を開始しましたが、ここに問題があります。必要なデータをBLLからDALに取得するための最良の方法がわかりません。ジェネリックコレクションを渡すことはできますか?データベースのすべてのデータを含む大規模なパラメータリストはありますか?実際のビジネスオブジェクトを渡すだけですか(したがって、DALをBLLの具体的なものに結び付けますか?)。

インターフェイスを使用することを考えました。IBusinessObjectAをDALに渡すだけで、現在の実装に過度に縛られることなく、探しているシンプルさが提供されます。皆さんはどう思いますか?

4

4 に答える 4

5

状況によっては選択肢が多いので、簡単な答えはないと思います。以下の2冊の本を読んで、あなたが説明している問題をよりよく理解するのに役立つことがわかりました。

  • MS .NET:エンタープライズ向けアプリケーションの設計(Esposito、Saltarello)
  • MSアプリケーションアーキテクチャガイド、第2版。

2冊目の本はオンラインで入手できます。ここを見てください。

于 2010-04-24T17:15:22.803 に答える
3

ビジネスオブジェクトをデータアクセス層に渡しても大丈夫だと思います。BLLの仕事は、オブジェクトを操作し、すべてのルールが守られているかどうか、何を保存できるか、誰が、どのフィールド、時間などを保存できるかを確認することだと思います。

それが完了したら、それをDALに渡す必要があります。それを永続化できるものに変換する方法を理解するのはITの仕事だと思いますが、何が永続化または読み取りされているのか、誰によって読み取られているのかはチェックされません。それはただそれをするでしょう。これはまっすぐ進む可能性がありますが、ロジックmdoelsがデータモデル1:1と一致しない場合は、DALがすべての変換を実行する必要があります。

DALをBLL内のものに結び付けることについては、逆に、BLLをDALに結び付けることについて心配する必要があると思います。インターフェイスを使用して(IRepositoryのように)DALを表すと、使用しているIRepositoryのタイプを変更するだけでBLLに任意の種類の永続化メカニズムを呼び出させることができます(IoC:Pを使用する場合は追加ポイント)。IRepositoryを実装する具体的なクラスはビジネスオブジェクトに関連付けられますが、保存しているのは何であるかを知っている必要がありますね。BLLは、何が節約を行っているかを知る必要はありません。

于 2010-04-24T17:12:10.513 に答える
3

DALでビジネスオブジェクトを渡すことは、より簡単で最速の方法です。小さなプロジェクトでは機能しますが、同じ欠点があります。

1)ビジネスオブジェクトはBLLレイヤーの一部であり、オブジェクトをBLLに渡すと、DALはBLLに依存するようになります。下位層は上位層について知っています-これは層の概念とはまったく矛盾します。

2)ビジネスオブジェクトは通常、BDに直接保存するには非常に複雑です。この場合、新しい「マッパー」中間層を導入することをお勧めします。

これらすべての問題を克服するために、私は通常、BusinessObjectsから独立したDALへのインターフェースを作成します。代わりに「行」クラスを使用します-データベースまたはXML内の1つのレコードの表現。.NET 3.5では、linqtosql自動生成クラスをこの目的に使用できます。

于 2010-04-24T17:19:50.490 に答える
2

私があなたの立場にある場合は、おそらくLINQ to SQLを使用してデータアクセス層を定義します-これにより、SqlCeFooBarのすべてを維持するための多くの作業が節約され、データベースを維持するための(ある種の)デザイナーが得られます。 SQL CEを使用すると、それ以外の場合は不足します。

したがって、その場合は、おそらくビジネスロジックレイヤーをL2Sレイヤーによって公開されているエンティティにかなり緊密に結合します。正当化は、サービスがないにもかかわらず、エンティティがビジネスオブジェクトであるということです。

ただし、エンティティをUIほど階層の上位に配置することはおそらく許可しません。そのレベルでは、特にWPFを使用している場合は、ビュー専用のモデルを使用する方がはるかに理にかなっています。

もちろん、これはすべて、アプリケーションのサイズと複雑さに依存します。SQL CEを使用していることを考えると、これはかなり小規模なアプリケーション(シングルユーザー?)だと思います。

于 2010-04-24T17:24:41.903 に答える