2012-02-21 8 views
1

今日、私は3層アーキテクチャで作業を開始しましたが、私は心の中で疑問を持っています。3層アーキテクチャの問題

通常、データ・コントロールをオブジェクト・データソースにバインドし、ビジネス・オブジェクトの関数を呼び出して、選択、挿入、更新または削除操作を実行します。私はこの方法で何の問題もありません。

しかし、私の問題は、2つのテキストボックスと1つのボタンが含まれているログイン部分があり、そのプロパティがユーザー名とパスワードを表すビジネスオブジェクトを作成した後、ビジネスオブジェクトの関数と呼ばれ、ユーザー名とパスワードが正しい場合、データベースからユーザーIDを含むデータローを返す関数。

データコントロールを操作していないときに3層で作業する正しい方法ではないと思います。ここでは関数や関数を不合理に呼び出す一方で、コードの背後にあるデータにもアクセスできます...私が正しく動作しているかどうかを教えてください... ...または同様の操作を実行するためのよりよい方法があります。

答えて

1

データとビジネスロジックの分離については、ASP.NETは奇妙です。 MVCを使うと簡単になりますが、使用しているかどうかは指定しません。

私たちは静的シリアライズクラスを構築します。このクラスはデータベースとのやりとりのみを担当します。それだけでストアドプロシージャの呼び出しが行われます。シリアライザがインスタンス化してデータベースからのデータを取り込む方法を知っているPOCO(普通の古いC#オブジェクト)のインスタンスを返します。

ここで、POCOは、コールをシリアライザに転送するファサードメソッドを提供します。たとえば、

public static Employee Load(int id) 

は、EmployeeSerializerクラスのLoadメソッドを呼び出します。それは他に何もしません。しかし、ページは従業員オブジェクトと自然なやり方で連携できます。

正しくはないかもしれませんが、これまでのものより優れています。同様に、Employee.Save()を呼び出し、その呼び出しはEmployeeSerializerに転送されます。

これは、すべてのストアドプロシージャコールを1つのクラスにカプセル化します。ビジネスロジックはEmployeeクラスにカプセル化されています。また、ページは従業員だけで使用できます。

ビジネスオブジェクトはデータベースオブジェクトとは別のDLLに存在することができますが、循環依存性に問題が発生する傾向があることに注意してください。それらを同じDLLに保管し、それらを別々の名前空間に入れます。しかし、それらを別々のDLL にまとめてASP.NETページから分離してください。

1

これは、あなたが話している怠惰なプログラマーです。

3段は絶対です。ちょっとソラ3階層はできません。これは3層ではありません。

3層は、長期的にはより保守性の高いコードを作るためにあり、短い熱で発達する時間を短縮するものではありません。ティアルークを使用してください。

関連する問題