2009-08-05 6 views
1

작은 팀과 함께 작업합니다. 우리는 종종 같은 비즈니스 모델이지만 노출이 다른 여러 전달 메커니즘을 가지고 있습니다. 우리는 우리의 어플리케이션 전반에 걸쳐 모델을 공유하고 유효성을 검증하는 효율성에 도움이 필요합니다.여러 UI 전달 메커니즘의 모델 및 유효성 확인

Silverlight 3 (비 RIA 서비스), ASP.net MVC 및 WPF에서 사용자 환경과 코드 재사용을 위해 모델에 대해 일관성있는 유효성 검사를 만드는 가장 좋은 방법은 무엇입니까?

도메인 모델에 대해 EF, NHibernate 또는 Linq to Sql을 사용할 수 있습니다. DTO 및 프리젠 테이션/뷰 모델 작성은 허용됩니다.

불행한 점은 데이터베이스가 유산이며 키에 대한 좋은 규칙을 따르지 않는다는 것입니다.

우리는 단일 모델 집합 및 유효성 검사 (간단한 유효성 검사) 방문자 또는 모든 배달 메커니즘에서 쉽게 사용할 수있는 방문자를 만들고 싶습니다. MVP 또는 MVVM 패턴은 UpdateControls와 마찬가지로 매력적이지만 모든 메커니즘에서 작동하는 단일 패턴을 찾을 수 없었습니다.

Silverlight 3에서 ComponentModel을 제거하면 웹에서 대부분의 예제가 무효화 된 것처럼 보입니다.

모든 조언을 주시면 감사하겠습니다.

답변

1

글쎄 개인적으로 사업용 모델의 Plain Old ClR Objects POCO를 사용하고 싶습니다.

using System.ComponentModel.DataAnnotations; 

위 네임 스페이스는 개체에도 유효성 검사를 제공합니다. 엔터프라이즈 응용 프로그램 유효성 검사 블록이 있지만이를 Silverlight 클라이언트 측에 통합하는 방법을 알지 못했습니다.

하지만 비즈니스 모델을 만들고 DataAnnotations로 장식 한 다음이 비즈니스 모델을 다시 사용할 수 있다는 이점이 있습니다.

이것은 POCO를 허용하지 않으므로 Hibernate와 함께 곧바로 상자에 들어갈 수 있지만 EF는 들어 가지 않습니다. Linq-to_Sql은 믿을 수 있지만 SQL Metal 또는 Linq-To_Sql의 특정 메타 데이터를 사용하여 매핑 파일을 사용해야합니다.

문제 중 하나는 물론 문제가 아니라 오히려 시나리오에서 Silverlight와 서버 간의 통신을 위해 WCF를 사용한다는 것입니다. 이렇게하면 생성 된 코드 기반의 서비스가 제공되며 변경하면 다음에 서비스를 업데이트 할 때 변경 사항이 손실됩니다.

MetaDataType을 사용하면 Silverlight에서 사용할 수있는 것을 볼 수 있는데, 생성시 클래스를 장식 할 때 재생할 때 작업을 손실하지 않고 사용할 수 있습니다.

WCF에서 .NET에서 .NET으로 작업하는 경우 더 많은 기능을 사용할 수 있지만 상호 운용성을 위해 유효성 검사 및 오류 반환이 필요한 경우 HasErrors 및 Error [] 속성이 포함 된 기본 응답 클래스가 있습니다. . 저는 현재 다음과 같은 일을 오전 :

실버 : - 생성 된 WCF 서비스 프록시 -의 ViewModel 세터와 게터 차단 서비스 프록시 클래스 랩 - System.ComponentModel를 사용하여 클라이언트 측 유효성 검사를 적용합니다.DataAnnotations

비즈니스 모델 : 는 - 내가 NHibernate에 와 POCO을 사용하고 - - 나는 엔터프라이즈 응용 프로그램 검증 블록 를 사용하고 난 HasErrors 및 오류 속성

WCF와 기본 도메인 클래스가 있습니다 를 - 내가

AddClientResponse AddClient(AddClientRequest request) 

즉, 요청 및 응답을 사용하기 DTO를 사용하여 실버 라이트는 WCF 서비스 하다니 WCF 서비스는 비즈니스 및 데이터 액세스 계층을 사용하는 저장소를 소모 소모한다.

위와 같이 플렉스 클라이언트를 사용하여 롤아웃 할 수 있으며 Flex 클라이언트 측에서 데이터 유효성 검사를 처리하지 않으면 클라이언트는 여전히 기본 응답 클래스에서 오류를 다시 수신합니다. 그런 다음 클라이언트 측 유효성 검사를 수행하거나 서버에서 반환 된 오류를 처리해야합니다. 클라이언트 측은 왕복을 절약합니다.

[DataContract] 
public class BaseResponse 
{ 
    [DataMember] 
    public Error[] Errors { get; set; } 
    [DataMember] 
    public Boolean HasErrors { get; set; } 
} 

희망이 있습니다.

나는 :-) 롤 항상 자신 지식 탐구에 답장을

앤드류

+0

감사입니다. 베타 버전에서 주석 경로를 시작했지만 어떤 이유로 릴리스에서 제거되었습니다. 나는 RIA 서비스 릴리스가 이것을 다시 넣을 수 있기를 바란다. 나는 사람들이 의미하는 시간에 대해 궁금해했다. 또한 MVC 릴리스 2가 메타 도우미 클래스를 통해 주석을 사용하고있는 것처럼 보입니다. 서비스 측면의 검증은 다양한 옵션을 통해 손쉽게 수행 할 수 있습니다. 클라이언트 측 (즉, 탭 오프하자마자)은 모든 UI 옵션에 대해 현재 수동 프로세스 인 것으로 보입니다. xval 프레임 워크는 MVC에서 이것을 도와주는 것 같다. –