2017-01-03 10 views
-1

このenumプロパティまたはフィールド(Domain、DTO、ViewModel)を持つ多層アーキテクチャとクラスがある場合は、どこでenumを定義する必要がありますか? POCOクラスの内部または外部で、すべてのレイヤーでこのコードを繰り返す必要がありますか?Automapperとenumプロパティ

答えて

0

間違いやバグの見つけにくいコードを繰り返すことは絶対に避けてください。私の推奨は、他のアプリケーションレイヤーでも依存関係を追加することなく使用できるように、一般的に参照されるDLLアセンブリにそのようなものを配置することです。

+0

DRY原則?) – Dmitry

0

個人的に私は別々のファイルで定義します。たとえば、 "Bla.cs"に定義されているenum "Bla"を持つ場合、そのenumを使用するコードは "using"ディレクティブを使用します。しかし、それはどのような列挙型にアクセスできる場所を定義するので、名前空間で、完全に任意である:

  1. 名前空間「アプリケーション」で定義する場合は、Application.Blaによって、あるいは単に「のBla」でアクセスするときと同じで名前空間
  2. あなたがパブリックとして定義あなたがAclass.Bla
2

でアクセスすることができます限り、「AClassは」という名前のクラス内で定義した場合、我々は、ドメイン、DTO、ViewModelに...階層化アーキテクチャを使用すると、ときに我々レイヤー間で使用する必要のある列挙型を定義するには、DTOレイヤーでのみ定義します。これは、定義上、DTOレイヤーがすべてのレイヤーにアクセス可能であるためです。私たちは、読みやすくするために、クラスの外部でこのような共有列挙型を作成する標準を使用します(つまり、EnumName.EnumValueとClassName.EnumName.EnumValue)。しかし、それは好みの問題です。

+0

hmm ...データアクセス層はビジネス層について知っていますか?それは正しい解決策ですか? – Dmitry

+0

私はあなたのDTO層が、データとビューに固有の層の間でかなり一般的な定義であることを期待しています。私にとって妥当な解決策のようです。 – Jake

+0

データアクセスサービスはDTOオブジェクトを返します(データレイヤー要素もビューレイヤー要素も含まない)。ビジネスレイヤーは純粋にDTOオブジェクトで通信します。 – sergio

関連する問題