2013-09-05 4 views
5

多くの異なる列挙体の使用を必要とするアプリケーションがあります。アプリケーションは、さまざまなレイヤーに分割できます。この例では、サードパーティ分析ライブラリ、アプリケーションビジネスロジック、UI /プレゼンテーションロジックの3つのレイヤーを想定しています。複数のアプリケーション層にわたる多くの列挙型の管理

多くの場合、すべてのレイヤーで同じ概念を表す列挙型が必要な場合があります。たとえば、支払いの頻度を考えてみましょう。 (例えば、年次、半期毎、四半期毎など)。 サードパーティのライブラリは独自の列挙型を提供しています。ビジネスロジックレイヤーのさまざまなクラスには同様の列挙型が必要です。最後にUIレイヤーでドロップダウンなどのさまざまな選択肢を提示する必要があります。

今、レイヤのパブリックインターフェイスの内部依存から型を公開しないことで、各層のユーザを内部の依存関係や実装の詳細から保護したいと考えています。つまり、第三者libとのやりとりには独自の「頻度」列挙型を使用する必要がありますが、私はビジネスレイヤーとUIレイヤーの別のものと同等の「頻度」列挙型を作成する必要があります。

これらのすべてでは、多くの追加のマッパークラスを使用して前後に多くのマッピングが必要です。一方、各レイヤーは、必要としない値を列挙型のそれ自体のバージョンからサポートしないようにすることができます。

列挙型のこれが一般的に良いことであるかどうか疑問に思っていたのですか、それとも私は事を過度に複雑にしていますか?

答えて

4

私は、あなたがものを過度に複製していると言います。このような共有エンティティ用に別々のプロジェクトを用意してみませんか?各アセンブリで、Commonプロジェクトを参照して、必要な列挙型を参照し、それらの列挙型を完全に独立させることができます。

+0

これはお勧めできません。列挙型を使用するエンティティの近くに列挙型を配置する方がよいでしょう。たとえば、 'Order'には' OrderType'列挙型があります。これは、プロジェクトの1つのフォルダに配置する意味があります。これにより、ビジネスロジックに従って簡単に変更することができます。このような異なる列挙型を1つの共通の場所にプールすることは魅力的ではありません。 –

+0

@ MaassoodKhaari列挙型を別々のライブラリに分割することで、コードの重複を避けてBLLレイヤーとUIレイヤーを疎結合させることができます。これは完全に良い提案です。 1つのフォルダに2つのものを置く*は、これらのものが緊密に結合されることを意図している限り、良いアイデアです。この例ではそうではありません(この例では、実際にはソリューション内の懸念の分離に害を与えます)。あなたの批判は本当に有効ではありません。 –

0

まあ、私はあなたを恋に落としているかもしれませんが、実際には、論理レイヤーであなたのenunsが見ているデータレイヤーに必要です。独自の例を使用すると、テーブルに列名PaymentFrequencyがあります。この特定のフィールドのデータ層にテーブルをマップする必要があります。このため、テーブルクラスまたはエンティティの属性であるPaymentFrequencyを列挙型と列のタイプを列挙型として作成します目的。したがって、ロジックレイヤーがデータレイヤーを要求/アクセスするように指示するときは、この同じ列挙型を理解する必要があります。ロジックレイヤーとデータレイヤーの間でDALレイヤーを使用する場合は、クラス/ファイル。さて、あなたのロジック層では、enumオプションを使用することで、単純なComboコンポーネントにenumオプションを設定します。したがって、ユーザーが獲得した方法ですべてのレイヤーを隠すことで、UIのオプションをプレイングさせますあなたが実際にオプションを扱うためにenumを使用しているのは分かりません。

このヘルプが欲しいです。申し訳ありません - 本当に申し訳ありません - このために*英語が間違っています! これで問題が解決しない場合は、簡単に助けることができるいくつかの例を投稿してください。=)

関連する問題