도메인 엔터티가 있고 기본적으로 실제 엔터티 개체의 하위 집합 인보기 가능한 엔터티가있는 실버 라이트 응용 프로그램 내에서 MVVM 패턴을 사용하는 방법에 대해 오늘이 기사를 읽었습니다. http://dotnetslackers.com/articles/silverlight/Silverlight-3-and-the-Data-Form-Control-part-I.aspx 이것은 DRY 원칙을 명백히 위반하지 않습니까? 그렇다면 어떻게하면 좋은 방식으로 처리 할 수 있습니까?모델 -view-ViewModel 패턴의 DRY 위반?
답변
나는 개인적으로 디노가 거기에서하는 일을 좋아하지 않으며 나는 같은 방식으로 문제에 접근하지 않을 것이다. 일반적으로 VM은 모델 클래스의 필터링 된 그룹화 된 정렬 컬렉션으로 생각합니다. VM은 뷰에 대한 직접 매핑이므로보기에서 사용되는 여러 CollectionViews (고객에 대해 하나의 CV, 제품에 대해 다른 CV, 아마도 둘 다 필터링 됨)가있는 NewOrderViewModel 클래스를 만들 수 있습니다. 모델의 모든 클래스에 대해 완전히 새로운 VM 클래스를 만드는 것은 제 생각에는 DRY를 위반합니다. 필요에 따라 모델을 보강하기 위해 파생 클래스 또는 부분 클래스를 사용하여 특정 (종종 계산 된) 속성보기에 추가합니다. IMO .NET RIA Services는 M 및 VM 데이터를 클라이언트와 서버 모두에서 사용할 수있는 추가 보너스와 결합하여 구현하는 데 적합합니다. 디노는 똑똑한 사람이지만,이 사람을 데리고 나가는 길은.
DRY는 원칙이지만 엄격한 규칙은 아닙니다. 당신은 인간이며 차별화 될 수 있습니다. 예. DRY가 실제로 어려운 규칙 인 경우 두 변수에 동일한 값을 할당하지 마십시오. 평범하지 않은 프로그램에서는 값이 0 인 변수를 두 개 이상 가질 것입니다.
일반적으로 DRY는 일반적으로 데이터에 적용되지 않습니다. 이러한 뷰 특정 엔티티는 주목할만한 로직이없는 데이터 전송 오브젝트 일 것입니다. 모든 종류의 이유로 데이터가 중복 될 수 있습니다.
여전히 viewmodel에 대한 조명 엔티티 클래스를 만들고 실제 엔티티에 대해 반복 할 때이 점은 매우 좋지 않습니다. – terjetyl
왜이 나쁜 점이 있습니까? – EricSchaefer
상속을 사용하지 않고도 동일한 항목을 나타내는 거의 동일한 두 개의 클래스를 만드는 중입니다. – terjetyl
답변은 실제로 ViewModel에 있어야한다고 생각하는 것에 달려 있다고 생각합니다. 나를 위해 ViewModel 현재 표시되는 화면의 모델을 나타냅니다.
ViewCategoryViewModel과 같은 항목의 경우 범주의 필드가 중복되지 않습니다. Category 객체를 ViewModel의 속성 (예 : "SelectedCategory"아래),보기에 표시해야하는 다른 데이터 및 화면에서 사용할 수있는 명령으로 표시합니다.
도메인 모델과 뷰 모델 간에는 항상 유사점이 있지만 ViewModel을 만드는 방법은 모두 유사합니다.
데이터 전송 개체 (DTO)와 동일합니다.
두 개체 유형에 대한 도메인 그래서 은 DRY의 위반이 아니다, 다르다.
class Customer
{
public int Age
}
그리고 corsponding보기 모델 : - 전혀 다른 속성 유형 - 다른 개체
class CustomerViewModel
{
public string Age;
// WPF validation code is going to be a bit more complicated:
public bool IsValid()
{
return string.IsNullOrEmpty(Age) == false;
}
}
에 differnt 도메인
는 다음과 같은 예를 생각해 보자.
1.이 컨텍스트에서 도메인이란 무엇입니까? 2. 비즈니스 모델에 고객 엔티티가 있습니다. 고객 엔티티, 고객 DTO 및 CustomerViewModel이 있다고 가정 해보십시오. 물론 여기에는 많은 중복 속성이 있습니다. 나는 이것이 DRY – terjetyl
의 명백한 위반이라고 생각한다. 1. 고객은 아마도 NH에 데이터베이스로 매핑 될 것이고, 그리 완벽하지 않은 db 스키마 때문에 해킹을 포함 할 수도있다. 많은 비즈니스 메소드, 콜렉션이 있으며,이를 화면에 표시 할 때 필요하지 않을 가능성이 높습니다. 2. SRP (Single Responsibility Principle)는 고객 클래스를 MVVM의 비즈니스 모델, DTO 및 ViewModel로 사용하는 경우 SRP를 분명히 휘발시키는 것보다 객체가 변경해야하는 유일한 이유가 있어야한다고 말합니다. 단 하나의 클래스를 갖는 것이 더 쉬울 때 상황이 있다는 것에 동의합니다. 모든 것은 상황에 따라 다릅니다. –
ViewModel에서 IsSelected와 같은 속성을 고려하고 화면에서 편집을 취소합니다 (일부 CustomerViewModel 클래스를 바인딩하지 않은 경우 Customer 개체를 되돌려 야 함). INotifyPropertyChanged를 구현합니다. 매우 단순한 시나리오에서만 DRY를 위반하는 것처럼 보입니다. –
- 1. Django DRY 모델 액세스 용 URL
- 2. DRY 방법
- 3. Rails 3의 모델 메소드와 컨트롤러에서 DRY 반복 코드를 사용하려면 어떻게해야합니까?
- 4. DRY - 문자열 또는 모델 객체의 경로 및 URL에 대한 질문
- 5. PHP OOP : 도메인 모델 패턴의 싱글/정적 방법을 피
- 6. DRY 및 이와 유사한 쿼리
- 7. Django의 고유 한 객체 DRY
- 8. 장고보기 유지 DRY
- 9. Android의 DRY 옵션 메뉴
- 10. Django DRY 피드
- 11. DRY 메타 코드
- 12. DRY Rails 마스터 템플릿?
- 13. ASP.NET MVC DRY
- 14. JMeter 테스트 용 DRY
- 15. 레일스 Paperclip, DRY 구성
- 16. Grails 프로젝트 간 코드 재사용 - 유지 DRY
- 17. 힙 위반
- 18. PK 위반
- 19. 공유 위반
- 20. DTO 및 엔티티를 DRY 원칙을 위반합니까?
- 21. MVC 패턴의 유효성 검사 레이어
- 22. Django에서의 DRY URL 자바 스크립트
- 23. DRY 같은 업데이트 기능 여기
- 24. Excel : DRY 포맷을 수행하는 방법?
- 25. Sudo 보석 업데이트 --dry-run?
- 26. 레일 DRY 문제 : 컨트롤러와 뷰
- 27. DRY : Java에서 반복되는 코드 최소화
- 28. Jira Gadget Plugin - Javascript DRY
- 29. MVC 패턴의 컨트롤러와 MVP 패턴의 표현 자의 차이점은 무엇입니까?
- 30. 디자인 패턴의 범주
동의합니다. VM은 뷰에서 알아야하는 모델의 부분이어야합니다. –