多くの異なる列挙体の使用を必要とするアプリケーションがあります。アプリケーションは、さまざまなレイヤーに分割できます。この例では、サードパーティ分析ライブラリ、アプリケーションビジネスロジック、UI /プレゼンテーションロジックの3つのレイヤーを想定しています。複数のアプリケーション層にわたる多くの列挙型の管理
多くの場合、すべてのレイヤーで同じ概念を表す列挙型が必要な場合があります。たとえば、支払いの頻度を考えてみましょう。 (例えば、年次、半期毎、四半期毎など)。 サードパーティのライブラリは独自の列挙型を提供しています。ビジネスロジックレイヤーのさまざまなクラスには同様の列挙型が必要です。最後にUIレイヤーでドロップダウンなどのさまざまな選択肢を提示する必要があります。
今、レイヤのパブリックインターフェイスの内部依存から型を公開しないことで、各層のユーザを内部の依存関係や実装の詳細から保護したいと考えています。つまり、第三者libとのやりとりには独自の「頻度」列挙型を使用する必要がありますが、私はビジネスレイヤーとUIレイヤーの別のものと同等の「頻度」列挙型を作成する必要があります。
これらのすべてでは、多くの追加のマッパークラスを使用して前後に多くのマッピングが必要です。一方、各レイヤーは、必要としない値を列挙型のそれ自体のバージョンからサポートしないようにすることができます。
列挙型のこれが一般的に良いことであるかどうか疑問に思っていたのですか、それとも私は事を過度に複雑にしていますか?
これはお勧めできません。列挙型を使用するエンティティの近くに列挙型を配置する方がよいでしょう。たとえば、 'Order'には' OrderType'列挙型があります。これは、プロジェクトの1つのフォルダに配置する意味があります。これにより、ビジネスロジックに従って簡単に変更することができます。このような異なる列挙型を1つの共通の場所にプールすることは魅力的ではありません。 –
@ MaassoodKhaari列挙型を別々のライブラリに分割することで、コードの重複を避けてBLLレイヤーとUIレイヤーを疎結合させることができます。これは完全に良い提案です。 1つのフォルダに2つのものを置く*は、これらのものが緊密に結合されることを意図している限り、良いアイデアです。この例ではそうではありません(この例では、実際にはソリューション内の懸念の分離に害を与えます)。あなたの批判は本当に有効ではありません。 –