2009-10-08 3 views
0

Silverlight 아키텍처에 대한 초기 조사에서 this을 수행 한 후에 고려해야 할 몇 가지 새로운 요구 사항이 있습니다.성능면에서 Silverlight 디자인 패턴 - 매우 리치 클라이언트 UI

우리는 Silverlight 클라이언트 UI가 GIS 인터페이스, 여러 차트, 게이지 및 데이터 격자가 위젯 스타일 방식으로 배열되어있어 그래픽이 무거울 것으로 기대합니다. 새 위젯은 사용자가 동적으로 생성합니다.

사용자가 데이터가 미리 채워진 기존 DataGrid 위젯에서 차트 위젯을 동적으로 만들고 싶다고 가정 해 보겠습니다. 서버에서 뷰 모델과 함께 MVVM 패턴을 사용하면 필요한 데이터가 이미 클라이언트에있을 때 불필요한 콜백이 발생합니다.

분명히 서버는 클라이언트의 새로운 차트 위젯에 대해 알아야하지만 클라이언트에서 먼저 기존 클라이언트 측 데이터를 사용하여 위젯을 만든 다음 서버에 새로운 변경 사항을 알리는 방법은 무엇입니까?

인트라넷에서 클라이언트와 서버 간의 네트워크 링크는 그리 좋지 않으므로 성능이 중요합니다.

공통적 인 Silverlight 아키텍처 패턴은 많은 비즈니스 로직이 서버에 다시 전달되어야한다고 생각한 것 같습니다. 나는이 이론을 이해하지만 응용 프로그램의 유용성에 큰 타격을 줄 것을 두려워합니다.

이 문제를 해결하는 특정 디자인 패턴이 있습니까? 이 '클라이언트 바인딩'은 MVVM, 프리즘 또는 다른 일반적인 Silverlight 아키텍처에서 지원됩니까?

내가 설명하려고 시도하는 것에 대해 더 공식적인 이름이 있습니까?

저는 Silverlight와 MVVM과 같은 디자인 패턴에 새로운 것이므로, 제 가정이 잘못 되었다면 제게 정정하십시오.

+2

몇 가지 사례 연구가 필요한 것 같습니다. 내가 가진 한 가지 중요한 점은 "일반적인 Silverlight 아키텍처 패턴은 비즈니스 로직을 서버에 다시 밀어 넣어야한다는 것"이 ​​정확하지 않고 Silverlight에서 가지고있는 추가 기능을 무효화한다는 것입니다. 클라이언트에서보다 강력한 유효성 검사 논리를 사용하여 일반적으로 AJAX를 사용하는 라운드 트립을 절약 할 수 있습니다. – sipwiz

+0

@sipwiz : 실제로, 나는 그것에 대해 틀리게 기쁘다. 나는 클라이언트와 서버 양쪽에서 모델을 정의하는 최선의 방법에 대해 혼란 스럽다. 일부 사례 연구가 가장 환영받을 것입니다. – Alex

+0

Silverlight를 사용하면 서버 또는 클라이언트에서 동일한 작업을 수행 할 수 있습니다. 그것은 당신이 선호하는 것을 선택할 수 있습니다. 예를 들어 서버 또는 클라이언트에서 유효성 검사를 수행 할 수 있습니다. – johnnywhoop

답변

2

MVVM 패턴은 관심사를 구분하기위한 것입니다. 데이터를 얻는 방법이나 위치를 정의하지 않습니다.

모델은 데이터입니다. 임의의 출처에서 가져온 데이터 일 수 있습니다. Silverlight에서 데이터를 가져 오는 가장 일반적인 방법은 웹 서비스 (SOAP/REST)를 사용하는 것입니다. 그러나 귀하의 모델은 어느 곳에서나 모든 데이터가 될 수 있습니다.

뷰 모델은 아마도 INotifyPropertyChanged 인터페이스를 구현하는 다른 클래스 일뿐입니다 (따라서 바인딩은 자동으로 업데이트 될 수 있습니다). 이 클래스는 뷰의 데이터에 대한 추상화입니다. "FirstName"이라는 문자열 속성이 있다고 가정합니다.

보기는 사용자 인터페이스 (SL의 사용자 정의 컨트롤)입니다. 여기에 바인딩을 ViewModel에 설정했습니다. IE,.

뷰 및 뷰 모델은 뷰 DataContext를 설정할 때 함께 배치됩니다. myView.DataContext = 새로운 MyViewModel(); DataContext를 설정하는 방법에 따라 여러 가지 방법으로 설정할 수 있습니다.

프리즘은 WPF/SL에서 분리 된 응용 프로그램을 작성하는 데 도움이되는 프레임 워크 일뿐입니다. UI 패턴 (예 : MVP/MVC/MVVM)의 사용을 강제하지 않습니다. MVC 개발을 돕기 위해 mediator (EventAgggregator) 및 Dependency Injection Container (Unity)와 같은 클래스를 사용할 수 있습니다.

이렇게 말하자면 ... 나는 당신이 모든 데이터를 얻을 수있는 웹 서비스를 갖고 있는지 제안 할 것입니다. 당신은 SL 응용 프로그램은 그 데이터를 얻을 것이다 (대부분의 웹 서비스는 뷰 모델에서 호출됩니다).이제 해당 데이터가 클라이언트 측에 존재하므로보기에서이 데이터에 바인딩하도록 VM을 설정할 수 있습니다.