2009-03-31 5 views
1

I'v eは、このDALを使用して複数のオブジェクトを持つデータとビジネス層を取得できる基本DALを構築しました。データをビジネスオブジェクトにマップして何かを実行したら、データをデータベースに書き戻したいと思っています。ビジネスオブジェクトの中には多くのプロパティがあるため、ビジネスオブジェクトのすべての値をパラメータとして対応するデータサービスのメソッドに渡すことはできません。私が考えてきた階層化されたアーキテクチャからのDBの更新:最適なアプローチ?

その他の方法:

  1. は、対応するデータサービスにビジネス・オブジェクトを渡すパラメータとしてすべての値とSPが実行されます。 (?) - 私はそれを埋める、ビジネスオブジェクト内の空のデータセットを作成DAL(分離に違反する)にビジネス・オブジェクトを渡すと、おそらく> 50個のパラメータ

  2. とのSPで終わる必要があるため、吸います値をビジネスオブジェクトから取得し、そのデータセットをデータサービスに渡し、データアダプタを介してdbを更新します。私は "... WHERE 0" -SQL文字列で空のデータセットを作成することを考えました。それは良い習慣になるだろうか?

これは初めてのことです。後者は私にとってはうまくいくかもしれませんが、おそらく他のより良いアプローチがありますか?または私が知らない何らかの理由で最初の方が良いですか?

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

は、[編集:]私は(唯一の鉱山が遠隔一つでありながら、ローカルのDBに問い合わせるサポート)C#Expressの

答えて

2

DALにオブジェクトを渡します。 DALレイヤーを手動で書き込む場合、DALレイヤーはエンティティを取得してDBに保持する方法、およびデータベースからエンティティを返す方法を知っている必要があります。 DALは、あなたのエンティティを不揮発性媒体に保存することに関するものです。

0

を使用しcuzの私は、LinQ2SQLを使用することはできませんあなたがビジネスオブジェクトを渡すときにということだと思いますなぜDALはあなたに違反しています。多分、あなたはbussinesオブジェクトを別のレイヤーに分離することを考えるべきです。

このようにしてlinq2SQLを試すと、パラメータを忘れてSPの数を減らすことができます。

1

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

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

+0

LinQを使用していないのは、私がC#express(ローカルDBにのみLinQを許可する)を使用しているからです。私の(SQL Express)サーバはリモートサーバです。 –

+0

申し訳ありません。 Entity Frameworkは機能しますか?ローカルデータベースを使用して開発し、同じスキーマを使用して接続文字列をリモートDBに変更することができます。 –

0

データアクセスレイヤーが非常に一般的でない限り、ビジネスオブジェクトの受け渡しはどのように悪いのでしょうか?

私はオブジェクトをシリアライズし、XMLをストアドプロシージャに渡すファンですが、私はおそらく少数派であろう。

+0

XMLを渡すのは本当に高価なものになりますが、今日のSQLの仕組みはわかりませんが、SQL 2000では一度に特定の数のXML DOMしか処理できませんでした。オブジェクトをXmlとして保存しない限り、Xmlとしてデータ層に渡さないようにします。 – JoshBerke

+0

SQL Server 2005と2008はまだこのように制限されているとは思いません。 2005年にXMLデータ型とnvarchar(max)が導入されました。 –

+0

ええ、2005年以降はxmlのネイティブサポートがあります。私はそれがオブジェクト全体またはオブジェクトのリストを挿入する最良の方法(BCPに加えて)を見つけます。オブジェクトを変更する場合は、DALに触れることなく保存されたprocを変更します。 –

1

DALは、すべてビジネスオブジェクトと特定のデータ表現の間のマッピングに関するものでなければなりません。このため、ドメインオブジェクトで動作するリポジトリパターンを使用すると、データベースではない永続化実装に切り替えることができます。

DALのメソッドにあまりに多くのパラメータを渡す必要があることを心配しています。次に、2つまたは3つの値を渡すだけでよい例を挙げてください。そのような場合は、メソッドの引数として渡すのが妥当です。より多くの値を渡す場合は、保存する値のサブセットを持つインターフェイスを定義することで実現できます。この方法では、メソッドが処理する情報を明確に指定しています。

上記に関係なく、メソッドをあまりにも具体的にしないでください。多くの組み合わせで終わると、難しくなる可能性があります。

関連する問題