我已經構建了一個簡單的基於MVC3的票據入口網站的呼叫中心應用程序不太可用,並試圖重構我的原型,以更好地堅持設計模式部分使它更容易維護,但主要是作爲一種學習練習。 面向用戶的視圖是一個由基本用戶信息組成的表單,此外還有一些允許選擇各種資源類型的面板。每種資源類型(硬件,軟件等)都以同樣的方式顯示:使用帶有添加/刪除按鈕的雙重可過濾列表框,可選的「對齊」textarea,如果請求的資源需要證明,則可以有條件地顯示,以及一般註釋。 我建立以下視圖模型的各個面板:MVC3 - ViewModels和控制器功能:建議的設計模式
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; }
}
}
主視圖模型然後由多個RequestableLists的必要:
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強類型視圖(及其變體)和一個強類型的EditorTemplate爲RequestableList,用於連接雙重列表框,過濾和jquery。所有渲染都很好,正在工作,但代碼目前聞起來。
在發佈到控制器時,如果模型有效,我必須將其轉換爲可讀的文本描述,以便在呼叫中心應用程序中創建新票。讓控制器將該翻譯轉換爲可讀文本並不妥當,但在嘗試設計另一個類來轉換視圖模型時遇到障礙。
- 在將請求轉換爲文本之前,只發布選定的項目值,我必須首先查找提供的值(它們在描述中是必需的)的適當文本。控制器是當前唯一可以訪問此查詢查詢的呼叫中心數據模型的對象。
- 有2個相似的ViewModel包含RequestableLists的不同組合,所以任何翻譯者都必須能夠翻譯各種組合。一個只有硬件和軟件,另一個可能有硬件軟件,還有幾個可請求列表。
我認爲直接覆蓋在視圖模型的ToString(),但沒有這樣的業務邏輯(有條件的渲染)出現,並再次,一旦公佈,視圖模型不包含在所選項目的文本listbox,所以它需要訪問數據模型。 將當前在控制器中處理的發佈值轉換爲文本,因爲它在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();
}
所以,我的問題(S):
- 什麼模式是技術,你會推薦進行發佈視圖模型來描述車票翻譯?
- 當您需要文字和價值時,您通常如何處理「選擇框」問題?
- 有沒有更好的方法來解決這個問題?
同樣,我希望這是我的學習經驗,我更願意在需要時提供額外的信息或說明更多。
完美。出於某種原因,我厭惡在除控制器和視圖以外的任何其他視圖模型中使用ViewModel。現在經紀人已經到位,圈套複雜性大幅下降。感謝您的答覆。 – Shawn 2011-05-09 18:17:21