2011-01-08 2 views
2

클래스 맨 위에 MetadataType 태그를 사용하여 사용자 정의 클래스 (LINQ에서 SQL로 자동 생성 됨)의 유효성 검사에 DataAnnotations를 사용하고 있습니다. 나는 DataAnnotations를 좋아하고 간단하고 일반적인 시나리오에서 잘 작동합니다. 예 :ASP.Net MVC2 DataAnnotations를 사용하여 동일한 클래스의 두 ViewModels을 다르게 확인합니다.

[MetadataType(typeof(Person_Validation))] 
public class Person 

하지만 서로 다른 시나리오의 클래스에 적용 유효성 검사 규칙의 두 개의 서로 다른 세트를해야하는 경우 ???

내 상황 : 일부 공개는 www 공개 사이트에서 필수 항목이지만 내부 관리 사이트에서는 필수 항목이 아닙니다. 그러나 두 사이트 모두 동일한 객체/클래스의 "새로 만들기"뷰가 있습니다.

이 DataAnnotations 지옥은 표면이된다 곳입니다

.. 내가 그들 각각에 적용되는 다른 유효성 검사 두 개의 서로 다른 ViewModels, 다른 유효성 검사가 그들 각각에 적용하여 사람에서 상속이 개 클래스를 사용하려고했습니다

. 그러나 모든 길은 DRY 교장과 충돌하는 것처럼 보입니다. 그러면 기본 클래스 구조에 대한 모든 속성을 완전히 재 지정하는 선상의 어떤 곳에서 끝납니다. 유효성 검사 규칙 집합을 하나만 가질 때이 작업을 수행 할 필요가 없습니다. 따라서 매우 빠르게 지옥이되어 복잡한 물건에는 실용적이지 않습니다.

DataAnnotations를 사용하면 이것이 가능하며 가장 좋은 DRY 아키텍처는 무엇입니까?

답변

1

"원래의 기본 클래스에 수동으로 각 속성을 수동으로 복제하고 수동으로 설정하는 것의 의미가 확실하지 않습니다." 나는 버디 클래스에 대한 아이디어를 결코 좋아하지 않았고 Admin과 Public 사이트에 대해 서로 다른 뷰 모델을 추천하고 (각각에 적절한 유효성 검증을 설정 한 후) AutoMapper을 사용하여 모델간에 맵핑했다.

UPDATE : 당신의 매핑을 정의하는 당신이

  • 첫째 : Automapper를 Regading

    는 기본적인 사용법은 다음과 같이한다. 이것은 automapper가 미리 객체를 매핑하는 방법을 파악할 수있게 해줍니다. 이 작업은 응용 프로그램에서 한 번만 수행하면되므로 ASP.NET 응용 프로그램에서이 작업을 수행하기에 좋은 곳은 Global.asax의 Application_Start()입니다. 당신이 사이에 매핑 할 클래스의 각 쌍의 경우, 전화 : Mapper.CreateMap<SourceType, DestinationType>();

  • 를 그런 다음 응용 프로그램 코드에서 그냥 사용하는지도 할 :

var destinationObject = Mapper.Map<SourceType, DestinationType>(sourceOjbect);

+0

내가 같은 결론에 도착을 AutoMapper가 참여해야 할 필요가 있지만, 내가 틀렸 으면 좋겠다. 이 문제는 "편집"보기를로드 할 때 발생합니다. 에서 id 매개 변수를 읽은 다음보기로 전달하기 전에 편집해야하는 객체를 가져옵니다. 이 때, 가져온 객체를 기반으로 ViewModel 내부의 값을 어떻게 든 설정해야합니다. 여기서 모든 경로가 AutoMapper 대신 지옥으로 연결됩니다. 이 전체 아키텍처가 두 개의 서로 다른 유효성 검사 규칙 집합을 사용하여 완벽하게 작동하도록 만들 수 있지만 검색된 개체의 값을 편집 용으로 설정하면 문제가 발생합니다. – Aaron

+0

그러나 automapper를 사용하고 싶지 않은 이유는 무엇입니까? - 사용하기 쉽고 사용하기 쉬운이 시나리오에 완벽합니다. 거기에 있다는 것을 거의 잊을 수 있습니다. – UpTheCreek

+0

나는 그것을 사용하는 것에 의지 할 것이고 당신의 매우 중요한 점을 고맙게 생각할 것이다. 그러나 나는 내 시스템에 가져 오는 외부/추가 구성 요소의 수를 최소화하려고 노력하고있다. 경험에서 3 년 추적, 갑자기 ASP 아래로.닷넷 MVC10이 출시되고 오토 마퍼의 실제 버전과 기타 애드온 DLL을 실행하기 때문에 전체 솔루션이 빌드되지 않습니다. 내 첫 환경 설정은 항상 원래 도구를 사용하기 전에 열심히 노력하는 것입니다 부가 기능. 일반적으로 추가 기능이 많을수록 안정성이 낮아지고 향후 유지 관리가 향상됩니다. – Aaron

관련 문제