2009-06-02 4 views
2

もっと練習するために少しのアプリケーションをリファクタリングしています。アプリケーションの目的は、「サインアップする新規ユーザー」フォームからデータを収集し、データベースに保存することです。私が持っている唯一の制限は、データベースと直接通信し、DataTableオブジェクトのデータ(該当する場合)を返す特別なカスタムデータアクセスクラスを使用する必要があることです。3レイヤーのアーキテクチャとドロップダウンリストのような細部

フォームに関する少しの細かい点や、レイヤーアーキテクチャーにどのようにフィットするのかという質問があります。たとえば、私のフォームにはデータベースから供給されるドロップダウンリストがありますが、同時にドロップダウンリストはSEごとのオブジェクトを表しません(オブジェクトであるUserとは異なり、複数のメソッドを持つUserクラスがあります、データメンバーなど)。コードの背後にあるストアドプロシージャの呼び出しを望んでいませんが、抽象化を過度にしたくはありません。

クラス抽象度を豊かにすることなく、これらの小さな詳細を処理するためのエレガントな方法は何でしょうか。

希望しています。

答えて

0

は私が最善の方法だかわからないが、何:

これらの他のスタックオーバーフローの私は(接線方向に関連した)そのショーの他の部分に答えてきた質問

私は、DropDownListオブジェクトと列挙型を引数として取るメソッドを持つユーティリティクラスを持っているので、そうする。

Fill DropDown(ddlistPhoneType、DropDownTypes.PhoneTypes);

ユーティリティクラスは、データベースから、時にはXMLから、そして場合によってはハードコードされた値から、時々ドロップダウンを埋めます。しかし、少なくともGUIはそれを心配する必要はありません。

+0

あなたは何のためにenum引数を渡していますか? FillDropDown()関数内でデータベースのやりとりをしていますか?私はデータベースを扱うすべての関数にパラメータ、パラメータ型などを渡さなければならないので、少し面倒になる格納されたprocsを使用しているので、それほど面倒をなくす方法を探しています。 – sarsnake

+0

ほとんどのドロップダウン値は単一のXMLファイルにあるため、enumはそのXMLファイルのセクションにマップされます。列挙型は、GUI開発者が簡単にできるようにすることです。XMLファイルの形式は次のとおりです。 ドロップダウンは単純な値/そのため、引数に1つの格納されたprocを使用して、データに使用するソースを指定することができます。 – MikeW

1
UIに非オブジェクトデータを取得するためのオプションがドロップダウンリストなどのようなもののためにデータの奇数ビットを取得するためのバケットまたは「サービス」である1つ以上のルックアップクラスを作成することです

...

例:

myDDL.DataSource = Lookup.GetAllCountries(); // GetAllCountriesは静的メソッド
//名前/値フィールドなどを設定します。
myDDL.DataBind();

この方法を使用しても、ティア分離をサポートできます。オブジェクト指向でもエレガントでもありませんが、実用的です。

+0

UIレイヤー内でDataBind()を実行している場合、分離が解除されませんか?私はそれを考えているかもしれませんが、もし私がそれを書き直しているのであれば、それを正しく得るかもしれません。 – sarsnake

+0

DDLを設定し、データバインドを実行するロジックがUIレイヤー(フォームコード/コードビハインド)に属しているかどうかはわかりません。 –

+0

もう少し説明しましょう。Lookupクラスは、他のビジネスクラスのようにデータアクセスレイヤを呼び出すビジネスレイヤまたはインフラストラクチャレイヤクラスです。つまり、UIレイヤーはこのビジネスレイヤークラスを呼び出し、その結果(この場合はデータセット)をDDLにバインドします。このバインディング接続は、従来、UIレイヤの適切な責任とみなされていました。 –

関連する問題