レイヤー間でデータを転送する最良の方法を知りたいです(例:カスタムクラス、データセット、DataReader ..)。
MVPの設計パターンを考えてみましょう。モデルレイヤーからプレゼンターレイヤーにデータを転送する最良の方法を知りたいです。
レイヤー間でデータを転送する最良の方法を知りたいです(例:カスタムクラス、データセット、DataReader ..)。
MVPの設計パターンを考えてみましょう。モデルレイヤーからプレゼンターレイヤーにデータを転送する最良の方法を知りたいです。
どちらでも使用できます
DTO / ビジネス オブジェクト (BO)
これらは、通常はロジックを含まないプレーン オールド CLR オブジェクト (POCO)です (または、BO で DTO を変換し、compare または toString メソッドをオーバーライドするための最低限のオブジェクト)。
たとえば、新しい従業員を作成する場合、データの転送に役立つ EmployeeBO というクラスがあります。ユーザー インターフェイスは、フォームからデータをキャプチャし、BO を作成してから、この BO を BLL (ビジネス ロジック レイヤー) に送信します。この BLL は、彼が必要と考えるすべてのことを実行し、最終的に BO をデータ アクセス層に送信して、DB に永続化します。
ここでは実際のオブジェクトを扱っているため、BLL レイヤーで BO を使用すると役立ちます。それらをリスト、辞書に格納できます... LINQ を使用してアクセスでき、最終的には ORM フレームワークまたは Microsoft Entity Framework を使用することもできます。
データセット
前のものと同様。その利点は主な欠点です。db との結合度が高いです。使用しないでください。
データリーダー
DataReaders の使用を検討する場合は、DataSets を使用してください :-)
パラメーター
すべてのパラメーターを IU レイヤーから BLL および DAL に渡します。これは実用的ではありません。
最良のものは DTOs/Business Objectsです。理想的には、DTO を使用して UI レイヤーから BLL に通信し、BLL が独自の BO オブジェクトを使用するようにします。そうしないと (私はそうしました)、UI がデータ アクセス レイヤーと結合され、バックエンドの変更が複雑になります。DTO と BO の間で分割すると、結合されないという利点が得られます。通常、どこかに DTO を BO に変換するメソッドがあります。
データを転送する最良の方法は、DTO オブジェクトです。
これらのオブジェクトには、転送するデータとしてインスタンス変数 (セッターとゲッターを含む) のみが含まれています。
このクラスには動作があってはなりません
たとえば、生徒のデータを渡したい場合は、次のようにします。
class StudentBean
{
private String name;
private String age;
public void setName(String n)
{
name=n;
}
public String getName()
{
return name;
}
public void setAge(int n)
{
age=n;
}
public int getAge()
{
return age;
}
}
StudentBean クラスを作成し、そのインスタンス変数にデータを入力してから、このオブジェクトをパラメーターとして他のレイヤーに渡すことができます。
最も便利な方法は、プレゼンテーション レイヤーの実装方法 (WPF、ASP.NET、ASP.NET MVC、WinForms...) によって異なると思います。
多数のDTOを持つことは、典型的で通常は適切な実装ですが、匿名型を使用することもできます。ここで同様の回答を既に提供しています: TempDataおよび/またはViewDataをサービスに渡すことは良い方法ですか? .
その回答の例は、ビジネス オブジェクトが匿名型にどのようにマップされ、その後プレゼンテーション層で使用されるかを示しています。もちろん、これらの匿名型は DTO として機能しますが、明示的に宣言する必要がないという違いがあります。さらに、アプリケーションの状態を表すビジネス オブジェクトを含むモデルがあることを前提としています。