Фон: у меня есть форма ViewModel с 7 свойствами, каждый ViewModel представляет разделы мастера, и все реализуют IFormSection.Я пытаюсь использовать одно определение (то есть DRY / SPoT) для этих моделей представления между многосекционными клиентами AJAX и односекционными клиентами с отключенным JavaScript.
Важно, чтобы они были доступны в качестве свойств, чтобы автоматизироватьработает сериализация / десериализация (т. е. привязка модели 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; }
}
Я сталкиваюсь с проблемами, когда у меня не может быть абстрактных статических методов, приводящих к слишком большому количеству вызовов рефлексии или обобщений, чтобы делать глупые вещи, и других проблем, которые просто делают весь мой мыслительный процесс неприятным запахом.
Помощь?
ps Я согласен, я могу упускать из виду гораздо более простую схему с участием делегатов или что-то в этом роде.Я также понимаю, что у меня есть проблемы с SoC, не все из которых являются результатом обобщения проблемы для StackOverflow.