필자는 언급 된 MVVM 패턴을 실험 해왔고 어떤 경우에는 명확한 경계를 정의하는 데 어려움을 겪어 왔습니다. 내 응용 프로그램에서는 컨트롤러에 대한 연결을 만들 수있는 대화 상자가 있습니다. 대화 상자에는 ViewModel 클래스가 있으며, 이는 매우 간단합니다. 그러나 대화 상자에는 추가 컨트롤러 (ContentTemplateSelector
으로 선택)가 있습니다.이 컨트롤은 연결된 컨트롤러 유형에 따라 다릅니다. 이 컨트롤에는 자체 ViewModel이 있습니다.MVVM : 중첩 된 ViewModels 간의 상호 작용을 처리하는 방법은 무엇입니까?
내가 겪고있는 문제는 확인을 눌러 대화 상자를 닫을 때 실제로 요청 된 연결을 만들어야하는데, 이는 내부 Controller 관련 ViewModel 클래스에 캡처 된 정보가 필요합니다. 단순히 컨트롤러 고유의 ViewModel 클래스 모두가 연결을 구성하는 공통 인터페이스를 구현하도록 유혹하고 있지만 내부 ViewModel이 실제로이 구성을 담당해야합니까?
내 일반적인 질문은 ViewModel이 서로 어떻게 상호 작용해야하는지에 대한 일반적으로 받아 들여지는 디자인 패턴이 무엇인지, 특히 '부모'VM이 무엇을해야 하는지를 알기 위해 '자식'VM의 도움이 필요할 때 그렇습니까?
편집 : 나는 원래 생각했던 것보다 조금 청소기의 디자인을 마련 않았다,하지만 난 여전히이 작업을 수행 할 수있는 '권리'방법입니다 있는지 확실하지 않습니다
. ContentTemplateSelector가 컨트롤러 인스턴스를보고 연결 작성자에게 표시 할 컨트롤을 마술처럼 찾도록 허용하는 백엔드 서비스가 있습니다. 나에 대해 저를 괴롭히는 것은 최상위 수준의 ViewModel이 생성 된 컨트롤에 대해 DataContext
을보고 적절한 인터페이스로 캐스팅해야한다는 것입니다. 나쁜 생각처럼 보입니다 (View의 DataContext
은 ? 연결)
나는 이런 식으로 뭔가 함께 상처는() 단순화 :
public interface IController
{
IControllerConnectionBuilder CreateConnectionBuilder();
}
public interface IControllerConnectionBuilder
{
ControllerConnection BuildConnection();
}
나는 나의 내부 뷰 모델 클래스는
IControllerConnectionBuilder
를 구현해야하고, 컨트롤러 내부 뷰 모델을 반환합니다. 그런 다음 최상위 ViewModel이
IControllerConnectionBuilder
을 (가상 마법 메커니즘을 통해) 시각화합니다. 여전히 내 안의 ViewModel이 건물을 수행한다는 것을 조금은 귀찮게하지만, 적어도 현재 내 최상위 ViewModel은 더러운 세부 사항을 알 필요가 없습니다. (시각화 된 컨트롤이 ViewModel).
더 자세히 정리할 방법이 있으면 추가 생각을 환영합니다. ViewModel에 대해 '괜찮은'책임이 얼마나 많은지 아직 확실하지 않습니다.
우리는 이러한 유형의 질문을 제 직업에 항상 부탁합니다. 당신은이 질문을 아주 잘 말 했으니, 여기서 좋은 피드백을 얻길 바랍니다. –
고맙게도 이것은 애완 동물 프로젝트이므로 다른 디자인을 탐구하는 사치를 느낍니다. 우리 가게는 WPF 나 MVVM을 채택하지 않았습니다. 왜냐하면이 초기 단계의 오버 헤드와 어색함이 우리의 현재 일정에 맞지 않기 때문입니다. 나는이 기술을 사용하는 방법을 이해하고 나면 이것이 생산성에 큰 이익을 가져다 줄 수있는 기술이라고 강력하게 믿는다.하지만 디자인에 선을 그어야하는 곳을 아는 것은 어렵다. –