배경 : 폼의 ViewModel에는 7 개의 속성이 있고, 각 ViewModel은 마법사의 섹션을 나타내며 모두 IFormSection을 구현합니다. 멀티 섹션 AJAX 클라이언트와 단일 섹션 JavaScript 비활성화 클라이언트 사이에서 이러한 ViewModels에 단일 정의 (예 : DRY/SPoT)를 사용하려고합니다.일반적인 작업을 위해 정렬 된 C# 속성 목록?
자동 직렬/역 직렬화 (즉, ASP.NET MVC 모델 바인딩)가 작동하도록 속성을 속성으로 액세스 할 수 있어야하며 제출되지 않은 섹션을 나타내려면 해당 속성을 개별적으로 nullable로 설정해야합니다.
그러나 공통된 IFormSection 연산을 사용하여 이러한 직렬화 가능 속성을 순서대로 반복하는 경우도 6 ~ 10 번 있습니다. 그러면 재사용을 위해이 속성 목록을 어떻게 저장할 수 있습니까? 편집 : 이것은 전체로드 작업에서 일괄 처리 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
이와 같이 속성을 연결하는 대신 마법사의 각 단계를 별도로 저장하는 것이 좋습니다. 나는 경험을 통해 말하면서 디버깅하고 그렇게 쉽게 작업 할 수 있다고 말하고 있습니다. – jfar
@jfar : "저장 하시겠습니까?" http 게시 작업을 의미합니까? 또는 각 CRU (D) 대응을 위해 컨트롤러에 스위치 명령문을 작성 하시겠습니까? 데이터 유효성 검사 규칙을 강화한 후 첫 번째 잘못된 페이지를 합리적으로 열어서 각 양식 단계에 별도의 URL을 사용하고 싶지 않습니다. – shannon