あまり使い物にならないコール センター アプリケーション用に、単純な MVC3 ベースのチケット エントリ サイトを構築しました。プロトタイプをリファクタリングして、デザイン パターンによりよく準拠するようにしています。ユーザー向けビューは、さまざまなリソース タイプを選択できるいくつかのパネルに加えて、基本的なユーザー情報で構成されるフォームです。各リソース タイプ (ハードウェア、ソフトウェアなど) は同じ方法で表示されます。追加/削除ボタンを備えたデュアルのフィルター可能なリストボックス、要求されたリソースに正当性が必要な場合に条件付きで表示されるオプションの「正当性」テキスト領域、および一般的なコメントを使用します。個々のパネル用に次の ViewModel を作成しました。
public class RequestableList
{
// list of requestable items ids requiring justification
private List<string> _restrictedItems = new List<string>();
public List<string> RestrictedItems
{
get { return _restrictedItems; }
set { _restrictedItems = value; }
}
// the key-value pairs from which to populate available items list
private Dictionary<string, string> _availableItems = new Dictionary<string, string>();
public Dictionary<string, string> AvailableItems
{
get { return _availableItems; }
set { _availableItems = value; }
}
// item ids requested by user
private List<string> _requestedItems = new List<string>();
public List<string> RequestedItems
{
get { return _requestedItems; }
set { _requestedItems = value; }
}
}
メインの ViewModel は、必要に応じて複数の RequestableList で構成されます。
public class SimpleRequestViewModel
{
public UserInfo userInfo { get; set; }
public RequestableList Software {get;set;}
public RequestableList Hardware {get;set;}
public RequestableList Access {get;set;}
public string SoftwareAdditionalInfo { get; set; }
public string HardwareAdditionalInfo { get; set; }
public string AccessFileMailShare { get; set; }
public string AccessAdditionalInfo { get; set; }
public string SoftwareJustification { get; set; }
public string HardwareJustification { get; set; }
public string AccessJustification { get; set; }
public string Comment { get; set; }
}
SimpleRequestViewModel (およびそのバリアント) の厳密に型指定されたビューと、デュアル リストボックス、フィルタリング、および jquery を接続する RequestableList の厳密に型指定された EditorTemplate を作成しました。すべてが適切にレンダリングされ、機能していますが、コードは現在臭いがあります。
コントローラーに投稿するとき、モデルが有効であれば、コール センター アプリで新しいチケットを作成するために、モデルを読み取り可能なテキストの説明に変換する必要があります。コントローラーがその変換を実行して読み取り可能なテキストにするのは適切ではありませんが、ビューモデルを変換する別のクラスを設計しようとすると、ハードルに遭遇します。
- 選択されたアイテムの値のみが投稿されるため、リクエストをテキストに変換する前に、まず提供された値に適したテキストを検索する必要があります (説明には値が必要です)。コントローラは、現在、このルックアップ クエリのコール センター データ モデルにアクセスできる唯一のオブジェクトです。
- RequestableList のさまざまな組み合わせを含む 2 つの同様の ViewModel があるため、翻訳者はさまざまな組み合わせを翻訳できなければなりません。1 つにはハードウェアとソフトウェアのみがあり、もう 1 つにはハードウェア ソフトウェアとさらにいくつかの RequestableList があります。
ViewModel で直接 ToString() をオーバーライドすることを検討しましたが、そのビジネス ロジック (条件付きレンダリング) が気に入らなかったため、再度投稿すると、ViewModel にはリストボックスで選択された項目のテキストが含まれていないため、アクセスが必要になります。データモデルに。送信された値をテキストに変換するのは、現在コントローラーで処理されているため、switch ステートメントで処理されているため臭いがします。コントローラーは、ポストされた各 RequestableList を受け取り、新しいチケットの説明を作成する前に、元の「利用可能」フィールドに入力します。
switch (requestCategory)
{
case RequestableCategory.Software:
itemList = sde.GetSoftware();
break;
case RequestableCategory.Hardware:
itemList = sde.GetHardware();
break;
case RequestableCategory.Access:
itemList = sde.GetAccess();
break;
case RequestableCategory.Telecom:
itemList = sde.GetTelecom();
break;
default:
throw new ArgumentException();
}
だから、私の質問:
- 投稿されたビューモデルからチケットの説明への変換を実行するために、どのようなパターンの手法をお勧めしますか?
- 値だけでなくテキストも必要な場合、選択ボックスで「値のみを投稿する」問題を通常どのように処理しますか?
- この問題に取り組むためのより良い方法はありますか?
繰り返しになりますが、これが私にとって学習経験になることを願っており、必要に応じて追加情報や説明を提供したいと思っています.