1

データを取得できる基本的な DAL と、この DAL を使用して複数のオブジェクトを含むビジネスレイヤーを構築しました。データをビジネス オブジェクトにマップし、何かを行ったら、データをデータベースに書き戻したいと考えています。一部のビジネス オブジェクトには多数のプロパティがあるため、ビジネス オブジェクトのすべての値をパラメータとして対応するデータ サービスのメソッドに渡すことはできません。

私が考えてきた他の方法:

  1. ビジネス オブジェクトを対応するデータ サービスに渡し、そこですべての値をパラメータとして SP を実行します。-ビジネスオブジェクトをDALに渡す必要があり(分離に違反)、おそらく50を超えるパラメーターを持つSPになるため、最悪です

  2. ビジネス オブジェクト内に空の (?) データセットを作成し、ビジネス オブジェクトからの値を入力し、そのデータセットをデータ サービスに渡し、dataadapter を介してデータベースを更新します。「... WHERE 0」-SQL 文字列を使用して空のデータセットを作成することを考えました。それは良い習慣でしょうか?

このようなことをするのはこれが初めてです。私には後者の方が良いように思えますが、他にもっと良いアプローチがあるのではないでしょうか? または、私が知らないいくつかの理由で最初のものの方が優れていますか?

どうもありがとうございました!

[編集:] C# Express を使用しているため、LinQ2SQL を使用できません (ローカル DB のクエリのみをサポートしていますが、私のものはリモート DB です)。

4

5 に答える 5

2

オブジェクトを DAL に渡します。DALレイヤーを手動で書く場合、DALレイヤーはエンティティを取得してDBに永続化する方法と、データベースからエンティティを返す方法を知っている必要があります。DAL は、不揮発性媒体へのエンティティの永続化に関するものです。

于 2009-03-31T16:26:14.103 に答える
1

あなたはLINQの使用について言及していません。それは、まだ .NET 3.5 を使用していないからですか?

また、DAL を汎用にする必要はありません。DAL の呼び出し元は、ビジネス オブジェクトのすべてのプロパティを更新しようとしているわけではありませんか? 彼らはおそらくその一部を更新したいと考えているので、これを行う API を提示する必要があります。たとえば、連絡先オブジェクトに住所を追加したり、電話番号を更新したりしたいだけかもしれません。呼び出し元が実際にやろうとしていることと、それを行うために必要な個別のメソッドの数との間のトレードオフが必要です。

于 2009-03-31T16:21:38.937 に答える
1

The DAL should be all about mapping between your business objects and the specific data representation. This is why the Repository pattern that works with the domain objects, allows you to switch to a different persistance implementation, that might not even be a database.

You are concerned about needing to pass too many parameters to the DAL's methods, and then mention an example where you only need to pass 2 or 3 values. If that is the case, passing it as the method's arguments is reasonable. If you are passing more values, one way you can achieve it is by defining an interface with the subset of values you want to save. This way you are specifying clearly the info that method will be handling.

Regardless of the above, don't make the methods too specific, as you would end up with lots of combinations which can make it harder to mantain.

于 2009-03-31T16:47:39.170 に答える
0

ビジネス オブジェクトを DAL に渡すときに、分離に違反していると思うのはなぜですか。ビジネス オブジェクトを別のレイヤーに分離することを検討する必要があるかもしれません。

また、パラメーターを忘れることができるようにlinq2SQLを試すこともできます。これにより、SPの数が減ります。

于 2009-03-31T16:21:13.757 に答える
0

データ アクセス レイヤーが非常に汎用的でない限り、ビジネス オブジェクトを渡すことはどのように悪いことでしょうか?

私はオブジェクトをシリアル化し、XML をストアド プロシージャに渡すのが好きですが、おそらく少数派です。

于 2009-03-31T16:24:43.327 に答える