과거에는 상속을 사용하여 응용 프로그램에서 Windows 양식을 확장 할 수있었습니다. 모든 양식에 공통 컨트롤, 아트 워크 및 기능이있는 경우 공통 컨트롤 및 기능을 구현하는 기본 양식을 만든 다음 다른 컨트롤이 해당 기본 양식에서 상속 할 수 있습니다. 그러나 그 디자인에 몇 가지 문제가 있습니다.
컨트롤은 한 번에 하나의 컨테이너에만있을 수 있으므로 정적 컨트롤은 까다로울 수 있습니다. 예를 들어,이 클래스의 다른 모든 파생 인스턴스가 동일한 TreeView를 수정하고 표시 할 수 있도록 보호하고 정적으로 만드는 TreeView를 포함하는 BaseForm이라는 기본 양식이 있다고 가정하십시오. TreeView는 한 번에 하나의 컨테이너에만있을 수 있기 때문에 BaseForm에서 상속되는 여러 클래스에는 작동하지 않습니다. 아마도 마지막으로 초기화 된 형태 일 것입니다. 모든 인스턴스가 컨트롤을 편집 할 수 있지만 주어진 시간에 하나씩 만 표시됩니다. 물론 해결 방법이 있지만 모두 추악합니다. (이것은 나에게 정말 나쁜 디자인 인 것 같습니다. 여러 컨테이너가 동일한 객체에 대한 포인터를 저장할 수없는 이유는 무엇입니까? 어쨌든 그것이 무엇입니까.)
폼 사이의 상태, 즉 버튼 상태, 레이블 텍스트 등은 전역 변수를 사용하고로드시 상태를 재설정해야합니다.
이것은 Visual Studio의 디자이너가 실제로 잘 지원하지 않습니다.
더 우수하면서도 쉽게 유지 관리 할 수있는 디자인이 있습니까? 아니면 양식 상속이 여전히 가장 좋은 방법입니까?
업데이트 MVC에서 MVP로, 관찰자 패턴에서 이벤트 패턴으로 보았습니다. 내가 지금 생각하고있는 것은 다음과 같습니다.
내 BaseForm 클래스에는 컨트롤과 해당 컨트롤에 연결된 이벤트 만 포함됩니다. 처리하기 위해 어떤 종류의 로직이 필요한 모든 이벤트는 즉시 BaseFormPresenter 클래스로 전달됩니다. 이 클래스는 UI의 데이터를 처리하고 논리 연산을 수행 한 다음 BaseFormModel을 업데이트합니다. 모델은 상태가 변경 될 때 발생하는 이벤트를 Presenter 클래스에 노출 시키며이 이벤트는 구독하거나 관찰합니다. 발표자가 이벤트 알림을 받으면 논리를 수행 한 다음 발표자가 그에 따라보기를 수정합니다.
메모리에는 각 Model 클래스 중 하나만 있지만 BaseForm과 BaseFormPresenter의 인스턴스가 많이있을 수 있습니다. 이렇게하면 BaseForm의 각 인스턴스를 동일한 데이터 모델로 동기화하는 문제가 해결됩니다.
질문 :
마지막으로 누른 버튼과 같은 항목을 저장 해야하는 레이어는 양식 사이에서 사용자를 위해 CSS 메뉴와 같이 강조 표시 할 수 있습니까?
이 디자인을 비판하십시오. 당신의 도움을 주셔서 감사합니다!