背景:我有一個窗體ViewModel有7個屬性,每個ViewModel表示一個嚮導的部分,全部實現IFormSection。我試圖在多節AJAX客戶端和單節JavaScript禁用客戶端之間爲這些ViewModel使用單個定義(即DRY/SPoT)。針對常見操作的C#屬性的排序列表?
將這些可訪問屬性設置爲自動序列化/反序列化工作(即ASP.NET MVC模型綁定)非常重要,並且這些屬性還必須單獨爲空,以指示未提交的部分。
但我也有6-10次使用常見的IFormSection操作遍歷這些可序列化的屬性,在某些情況下以有序的方式。那麼,我該如何存儲這個屬性列表以供重用?編輯:這包括批量new()
在滿載操作中進行。
例如,也許最終的結果看起來是這樣:
interface IFormSection {
void Load();
void Save();
bool Validate();
IFormSection GetNextSection(); // It's ok if this has to be done via ISectionManager
string DisplayName; // e.g. "Contact Information"
string AssociatedViewModelName; // e.g. "ContactInformation"
}
interface ISectionManager {
void LoadAllSections(); // EDIT: added this to clarify a desired use.
IFormSection GetRequestedSection(string name); // Users can navigate to a specific section
List<IFormSection> GetSections(bool? ValidityFilter = null);
// I'd use the above List to get the first invalid section
// (since a new user cannot proceed past an invalid section),
// also to get a list of sections to call .Save on,
// also to .Load and render all sections.
}
interface IFormTopLevel {
// Bindable properties
IFormSection ProfileContactInformation { get; set; }
IFormSection Page2 { get; set; }
IFormSection Page3 { get; set; }
IFormSection Page4 { get; set; }
IFormSection Page5 { get; set; }
IFormSection Page6 { get; set; }
IFormSection Page7 { get; set; }
}
我運行到那裏,我不能有抽象的靜態方法,導致過多的反射來電或仿製藥做蠢事問題,和其他問題,只是讓我的整個思維過程聞起來不好。
幫助?
p.s. 我接受我可能會忽略涉及代表或其他事情的更簡單的設計。我也意識到我在這裏有SoC問題,並非所有這些都是StackOverflow問題的總結。
我目前正試圖讓每個屬性僅僅反映一個OrderedDictionary的單個成員,但我在設想它如何工作時遇到了麻煩。 – shannon 2011-03-15 23:24:00
您可能希望單獨保存嚮導中的每個步驟,而不是像這樣鏈接屬性。當我說它更容易調試並以這種方式工作時,我正在從經驗中談到。 – jfar 2011-03-16 02:39:07
@jfar:請您澄清「保存」嗎?你的意思是http post操作?或者,你的意思是在控制器中爲每個CRU(D)的責任創建switch語句?我不希望每個表單步驟都有單獨的URL,因爲我希望能夠合理地打開第一個無效頁面(例如收緊數據驗證規則之後)。 – shannon 2011-03-16 09:05:12