10

私は、新しいアプリケーションにデータ層を実装する最良の方法について同僚と「議論」している最中です。

1 つの観点は、データ層がビジネス オブジェクト (エンティティを表す独自のクラス) を認識し、そのオブジェクトをネイティブに操作できる必要があるということです。

反対の見方は、データ層はオブジェクトにとらわれず、純粋に単純なデータ型 (文字列、ブール値、日付など) を処理する必要があるというものです。

両方のアプローチが有効であることはわかりますが、私自身の見解では、前者を好むということです。そうすれば、データ ストレージ メディアが変更されても、新しいデータ レイヤーに対応するためにビジネス レイヤーを (必ずしも) 変更する必要はありません。したがって、SQL データ ストアからシリアル化された xml ファイルシステム ストアに変更するのは簡単なことです。

私の同僚の見解は、データ層がオブジェクト定義について知る必要はなく、データが適切に渡される限り、それで十分だというものです。

これが宗教戦争を引き起こす可能性のある質問の 1 つであることはわかっていますが、そのような問題にどのように取り組むかについて、コミュニティからのフィードバックをいただければ幸いです。

ティア

4

8 に答える 8

5

それは本当にあなたの世界観に依存します-私はかつて非結合キャンプにいました. DAL は BAL にデータを提供するためだけにありました - 話の終わりです。

Linq to SQL や Entity Framework などの新しいテクノロジの普及に伴い、DAL と BAL の境界線が少し曖昧になりました。特に L2S では、オブジェクト モデルがデータベース フィールドに 1 対 1 でマッピングされているため、DAL はビジネス オブジェクトに非常に緊密に結合されています。

ソフトウェア開発と同様に、正解も不正解もありません。自分の要件と将来の要件を理解し、そこから作業する必要があります。ダハールラリーでは、サーキットでレンジローバーを使うようにフェラーリを使うことはもうありません。

于 2008-08-14T10:38:04.677 に答える
3

あなたは両方を持つことができます。データ層がビジネス オブジェクトを認識しないようにし、複数の種類のデータ ソースを操作できるようにします。データを操作するための共通のインターフェイス (または抽象クラス) を指定すると、データ ソースの種類ごとに異なる実装を使用できます。ここでは工場パターンがうまくいきます。

于 2008-08-14T10:28:43.070 に答える
1

私が持っている、このトピックを扱った優れた本は、Clifton Nock によるData Access Patternsです。ビジネスレイヤーを永続レイヤーから分離する方法について、多くの優れた説明と優れたアイデアがあります。ぜひ試してみてください。それは私のお気に入りの本の一つです。

于 2008-08-14T10:27:50.500 に答える
1

Jeffrey Palermo がこれについて良い記事を書いています。彼はそれをオニオン アーキテクチャと呼んだ。

于 2008-08-14T10:30:21.243 に答える
0

私が便利だと思った 1 つのトリックは、データ レイヤーを「コレクションにとらわれない」ものにすることです。つまり、データ層からオブジェクトのリストを返したいときはいつでも、呼び出し元にリストを渡してもらいます。したがって、これの代わりに:

public IList<Foo> GetFoosById(int id) { ... }

私はこれをします:

public void GetFoosById(IList<Foo> foos, int id) { ... }

これにより、必要な場合は単純な古いリストを渡すことができます。UI からバインドする予定がある場合は、IList<T> のよりインテリジェントな実装 (ObservableCollection<T> など) を渡すことができます。この手法により、エラー メッセージが発生した場合に ValidationResult などのエラー メッセージをメソッドから返すこともできます。

これは、データ層がオブジェクト定義を認識していることを意味しますが、柔軟性が 1 段階高くなります。

于 2008-08-14T10:28:08.673 に答える
0

Linq to SQL を確認してください。今新しいアプリケーションを作成している場合は、完全に Linq ベースのデータ レイヤーに依存することを検討します。

それ以外では、データとロジックを可能な限り分離することは良い習慣だと思いますが、それが常に実用的であるとは限りません。ロジックとデータ アクセスを純粋に分離すると、結合と最適化が難しくなります。これが、Linq を非常に強力にしている理由です。

于 2008-08-14T10:28:20.810 に答える
0

NHibernate を使用するアプリケーションでは、XML マッピング定義 (どのテーブルがどのオブジェクトに属し、どの列がどのフィールドに属するかなどを指定する) が明確にビジネス オブジェクト層にある一方で、答えは「中間のどこか」になります。 .

これらは、どのビジネス オブジェクトも認識しない汎用データ セッション マネージャに渡されます。唯一の要件は、CRUD のために渡されるビジネス オブジェクトにマッピング ファイルが必要なことです。

于 2008-08-14T10:30:51.773 に答える
0

古い投稿ですが、同様の情報を検索すると、これに出くわし、うまく説明されています。

于 2008-10-11T13:24:06.287 に答える