4

現在、データセットをデータレイヤーまたはビジネスレイヤーに入れるかどうかについて議論しています。

私の友人は、すべての ADO.NET コンポーネントをデータ層に入れるべきだと考えています。私にとって、これは次の理由から正しくないようです。

  • ファット データ レイヤー クライアントを作成すると、たとえば、すべてを別のデータ ソースに移行するのがはるかに難しくなります。
  • ビジネス層のロジックをスキップしない限り、バインドされたコントロールを持つことはできません。

データセットとデータテーブルはすべてのデータ プロバイダーに共通であるため、ビジネス ロジックに含める必要があると思います。データ層には、適切なプロバイダーのオブジェクト (接続、データアダプター、トランザクション、データリーダーなど) をインスタンス化するためのプロバイダー ファクトリが必要です。私にとって、これは次の理由から行く方法です。

  • 別のデータ レイヤーへの移行は非常に簡単です。
  • コントロールを豊富なビジネス オブジェクトにバインドできます

n層の第一人者は、進むべき道を明確にするのに役立ちますか?

4

6 に答える 6

5

私の意見では、DataSet はまったく使用しないでください。型指定された DataSet も使用しないでください。これらは、LINQ より前に作成された古い構造です。古代の歴史をスキップして、現在時制に入る: LINQ to Entities と Entity Framework (EF) を使用します。この 2 つは密接に関連していますが、同じではありません。

サービス境界を越えて EF エンティティを公開しないでください。残念ながら、Microsoft は、エンティティをシリアル化するときに実装の詳細を公開することを選択しました。それ以外では、EF を使用して、DataSet よりも多くの楽しみを持ってください。

于 2009-05-08T00:37:06.593 に答える
2

データアクセスの分離は新しいものではありません。15年前に行っています(そうです、15年前です!)。

私は多くの場所で働いてきましたが、多くの孤立したデータレイヤーを見ました。

しかし、私は決して-これまでに!-データソースが置き換えられているのを見ました!

はい、私はそれを2回見ました:そして2回、私たちはまた、oudatedデータ層とすべてのトッピングソフトウェアを置き換えます...

私の答えは非常に単純です。シェルフソフトウェアで作業しているのでない限り、データレイヤーを必要なだけ分離でき、無料で実行できます。

変更のためだけにSQLServerやOracleを変更する人はいないので、何の意味もありません。そして、誰かがそれをする日のために、彼らはまた彼らのソフトウェアを書き直すか、彼らが購入している製品が彼らが残している製品と互換性があることを確信するでしょう。

私の本では、どんなデータ層も愚かです。

あなたがそれに同意しないなら、あなたの人生の中でこの層が誰かに$$$を節約するときを教えてください...

于 2009-05-08T00:45:53.407 に答える
1

ここでは、データ層からビジネス層にデータセット、データテーブル、データ行、およびデータリーダーを返します。

理由は、これらの型が db-flavor 固有ではないということです。mysql、アクセス、sql サーバー、オラクル、またはデータセットがデータセットであるものを使用するかどうかに関係なく、ルート レベルのデータ レイヤーから戻っても問題ありません。

次に、ビジネス層がこの生データを受け取り、強く型付けされたビジネス オブジェクトに変換し、必要なビジネス ルールを適用して、プレゼンテーション層に渡します。


編集:いくつかのコードを見てみると、完全なデータセットはあまり使用されていません。主にデータテーブルとデータリーダーです。

于 2009-05-08T00:35:33.167 に答える
0

一般的なアプローチは、ビジネスロジックレイヤー/ドメインに集約ルート(顧客など)リポジトリインターフェイスを公開し、データアクセスレイヤー/インフラストラクチャに具象リポジトリを実装することです。

于 2009-05-08T00:42:04.087 に答える
0

DataSet に関する根本的な問題は、その構造がデータベース スキーマを正確に反映していることです。

DataSet を実際のページ レンダリング コードに公開すると、データベース スキーマ (製品の最終的なバックエンド) がプレゼンテーション レイヤーに効果的に公開されます。ここで、明らかな問題が発生する可能性があります。後で、基になるデータ スキーマを再構築する必要が生じ、設計のために、システム内の他のすべてのレイヤーに変更を適用する必要があります。これは、カプセル化が実際に使用されるべきときに使用されていない典型的な例です。

DataSet を使用する場合は、DataSet をデータ アクセス層に埋め込んで、ビジネス オブジェクトの概念セットをプレゼンテーション層に公開します。公開する一連のビジネス オブジェクトは、適切なオブジェクト指向の原則に従って設計する必要があります。これは、適切なリレーショナル データベース設計の原則とはまったく異なります。

于 2009-05-08T00:54:21.810 に答える
-1

dataSetをまったく使用しないことに同意する必要があります。私が取り組んだアプリケーションの1つは、データ層とアプリケーション層の両方にデータセットがありました。DataLayer DataSetsは、アプリケーション層のデータセットが情報を非正規化してフロントエンドでより使いやすくするデータベースと一致しました。

于 2009-05-08T00:44:13.427 に答える