0

광범위한 디자인/아키텍처 질문. GUI에 중첩 된 구성 요소가있는 경우 해당 구성 요소가 데이터와 상호 작용하는 가장 일반적인 방법은 무엇입니까?중첩 된 구성 요소가 GUI 응용 프로그램에서 모델과 상호 작용하는 방법은 무엇입니까?

예를 들어, 구성 요소가 해당 버튼 중 하나를 클릭하여 데이터를 저장한다고 가정 해 봅시다. 저장 요청이 해당 구성 요소의 조상 위로 위임되어야하며 최상위 조상이 궁극적으로 요청을 컨트롤러에 전달해야합니까?

또는 GUI 응용 프로그램의 모델/데이터 저장소가 일반적으로 싱글 톤이므로 계층 구조의 모든 수준에있는 구성 요소가 직접 데이터를 가져 오거나 설정할 수 있습니까?

또는 컨트롤러가 구성 요소의 계층 구조 아래 종속성으로 삽입되어 특정 구성 요소가 데이터 저장소/모델로부터 하나의 중간 매개체에 불과합니까?

답변

2

첫 번째 생각은 GUI 구성 요소가 호출 할 수있는 싱글 톤 데이터 계층 API를 정의하는 것입니다.

데이터의 여러 인스턴스가 필요한 경우 GUI 구성 요소가 저장할 수있는 '핸들'을 제공하고 데이터를 다시 가져 오기 위해 데이터 계층에 전달할 수 있습니다.

이 아이디어는 예를 들어 파일 시스템 API와 유사합니다. 또는 SQL 서버 API; 또는 임의의 O/S API.

1

은 일반적으로 몇 가지 옵션이 중첩 된 구성 요소와 함께 작동 할 수있다 :

  • 중첩 된 구성 요소는 루트 요소/중첩 된 구성 요소 자체 모델을 사용과 같은 모델을 사용합니다.

  • 중첩 구성 요소는 루트 구성 요소와 동일한 컨트롤러와 상호 작용합니다. 중첩 구성 요소는 자체 컨트롤러로 작동합니다.

사용할 정답은 하나뿐입니다. 물론 동일한 모델과 동일한 컨트롤러를 사용하는 것이 가장 간단한 방법이지만 중첩 된 구성 요소에 복잡한 UI 로직이 포함되어 있으면 모델 또는 컨트롤러를 분리하는 것이 좋습니다.

또한 어떤 언어를 사용합니까? 어떤 플랫폼? 다른 프로그래밍 환경에서는 구현이 다양합니다. 객체 지향 컴포넌트 기반 GUI 모델을 지원하는 플랫폼을 사용하는 경우 중첩 제어를 사용자 정의 컨트롤에 캡슐화하고 재사용 가능한 캡슐화 된 사용하기 쉬운 구성 요소를 얻을 수 있습니다.

모델에 대한 싱글 톤을 사용하는 것이 좋다고 생각합니다. 특히 가비지 수집기에서 언어를 사용하는 것이 좋습니다. 싱글 톤을 사용하는 것은 간단하지만 루트 뷰에서 중첩 컨트롤의 두 번째 인스턴스가 필요한 경우에는 어떻게해야할까요?

1

나는 위의 STO에 동의 : 부모 뷰의 C/VM과 공유하는 기본 컨트롤러/뷰 모델로 데이터를 밀어

  • 이 내 애플 리케이션의 대부분에서 할 것입니다.
  • 싱글 톤을 갖는 것은 나쁜 생각입니다! 싱글 톤이 필요하다고 생각되면 인스턴스를 캐시하는 팩토리를 호출하여 동일한 결과를 얻을 수 있습니다. 예 : factory.GetAcountViewModel();
  • 처리를 부모에게 위임하지는 않습니다 - 일반적으로. 이제는 UI 레이어를 통해 데이터와 상태를 전달하기 때문에 코드의 테스트 가능성이 줄어 듭니다.

은 그냥이 참고 : 당신이 몇 가지 추가 읽기까지의 경우은 또한 합성 가능한 UI의 일반화 문제를 해결 http://compositewpf.codeplex.com을 체크 아웃 할 수 있습니다 .

관련 문제