2011-01-22 4 views
0

私はこのプロジェクトのウェブ/ UI、サービス、リポジトリ、コモンなど、このケースでは問題にはならないいくつかのレイヤーを持っています。データ検索用の定数に関する質問

サイトに生成されたすべての電子メールデータを保持する電子メールテーブルがあります。また、電子メールテーブルのどの電子メールが呼び出されるべきかを追跡するEmailTypeというテーブルがあります。

私のメールサービスでは、以下の方法があります。

public string SendPurchaseConfirmationEmail(string email, string firstName, string dealName) { 
    Email email = EmailRepository.GetByCurrentByType(EmailType.PurchaseEmail.GetStringValue()); 
    variables = createVariablesList(); 
    SendEmail(email.ListId, email.externalEmailId, variables); 
} 

EmailTypeは、GUIDで、私のリポジトリに格納された値の属性を取得するための拡張子を持つUNUMです。 EmailTypeテーブルは、テスト電子メールを生成する管理者ではうまくいきますが、実際のWebレイヤーでは、サービスコールにはリポジトリ内のハードコードされた値が必要です。

私の質問は、これを行うための最良の推奨方法ですか、これを何らかの方法でより動的にすることができますか?私が気に入らない部分は、Web層がリポジトリに触れる必要があるため、私のサービス層はすべての電子メールのためのメソッドを必要とします。

また、コードの分離が懸念される場合は、サービスレイヤーに列挙型を配置すると間違った配置になります。

おかげで、「ウェブ層」コール(ビューから呼び出すサービス)に関しては、この

public string SendConfirmationEmail(EmailType selectedType, string email, string firstName, string dealName) {  
    Email email = EmailRepository.GetByCurrentByType(selectedType);  
    variables = createVariablesList();  
    SendEmail(email.ListId, email.externalEmailId, variables); 
} 

+0

「ウェブレイヤー」という用語ではどういう意味ですか? – mare

+0

申し訳ありませんMVCを使用しているので、UIまたはWebレイヤーは実際のaspxページ/ビューとコントローラです。 –

答えて

0

はい、あなたの「サービス」層とDBの両方の電子メールタイプのセットにいくつかの「キー」値を繰り返す必要があります。

電子メールテーブル(またはDBコードの値に簡単に対応する他の値)に格納されている「外部キー」の値を使用しないと、DBルックアップを実行する必要がありますあなたの電子メールタイプテーブル。

電子メールタイプテーブルに整数サロゲートキーを使用し、そのタイプのセットを使用する必要のある任意のレイヤーのサロゲートキー値にマップする名前付き数値定数のセットを作成することをお勧めします(特に、 DB自体に)。他のすべてのレイヤーは、これらのレイヤーの1つを介して名前の定数のセットを使用する必要があります。

0

変更サービスメソッドは、私はあなたが意味を正確に知りませんが、それがAJAXの呼び出しであれば、呼び出しの列挙を使うことができます。 AJAX以外では、基本的にMVCにGETとPOSTがあるので、どのような種類の呼び出しを行うことができるのか分かりません。 コントローラの動作をPOSTすると、再びenumを使うことができます。

もちろんこの

EmailService.SendConfirmationEmail(EmailType.Purchase, email, fname, dealname); 

のように、あなたのサービスのメソッドが静的にする場合は、上記のサンプルは有効です。