2009-12-30 3 views
0

뷰가 더티 경우에만 활성화되는 저장 버튼이 필요합니다. 어떻게 접근해야합니까?Model-View-Presenter 패턴을 사용하여 IsDirty에 대한 UI를 구현하는 방법은 무엇입니까?

내 특별한 상황은 .NET 2.0을 사용하는 WinForms 응용 프로그램입니다. 발표자가 호출하는 서비스 계층이 있습니다. 서비스 계층은 화면 바인딩 된 DTO를 반환합니다.

뷰를이 DTO에 바인딩하고 DTO가 isDirty 속성을 구현하도록해도됩니까? 아니면 DTO의 데이터를 프리젠 테이션 목적으로 특별히 설계된 다른 객체로 언로드해야합니까? viewmodel?

+1

"MVP"는 꽤 넓습니다 ... 플랫폼/언어/아키텍처는 무엇입니까? –

+0

@Marc 바라건대 이것은 약간의 응답을 줄 수있는 더 자세한 내용을 제공합니다. – David

답변

6

보기가 더러워서는 안됩니다. 귀하의 모델 만.

그러면 모델이 더러워지면 트리거하는 이벤트와 정리 될 이벤트를 간단히 만들 수 있습니다.

+1

그것은 저의 초기 생각이었습니다. 모델은 더러워 져서 그 견해가 그 사실을 반영 할 수 있습니다. 그래서 모델이 isdirty 속성을 구현해야한다고 가정합니다. – David

0

여러분은 모든 컨트롤에 _presenter.MarkDirty() 또는 이와 유사한 메서드를 호출하는 곳에서 활성화 된 변경 사항에 대한 자동 다시 게시를 만들 수 있습니까?

또는 저장 버튼을 사용하도록 허용 할 수 있지만 객체가 깨끗한 경우 아무런 변경 사항이없는 대화 상자 또는 이와 유사한 방식으로 응답 할 수 있습니다.

+0

Autopost back은 WinForms에서 가장 정확한 단어가 아니지만 최소한 내 포인트를 전달해야합니다. –

0

@Pace에 동의합니다.이 모델 만 더러워야합니다.

그냥 여기에 추가하고 싶습니다. (이것에 관한 것 같습니다 .net) 여러분의 모델을 구현하기 위해 CSLA을 사용할 수 있으며 무료로 IsDirty funcionality (및 기타 많은 것들)를 얻을 수 있습니다.

업데이트 :

는 CSLA는 비즈니스 계층에 대한 아닙니까?

네, 실제로 저는 IsDirty 메소드가 비즈니스 계층에 속한다고 생각합니다. 당신은 당신의 DTO에 IsDirty를 구현하는 법을 말하지만, 당신이 그렇게하는 순간, 객체는 더 이상 DTO가 아닙니다 (데이터를 전송하는 것 이상으로).

또한 은 DTL과 프리젠 테이션 계층 사이의 중간 계층으로 CSLA를 사용할 수 있습니다. 단, IsDirty 기능 만 사용하려는 경우에는 약간의 오버 헤드가 될 수 있습니다.

요점은 : '기능성'을 DTO에 넣기 시작한 순간, 단순한 DTO 대신에 비즈니스 계층에서 CSLA 객체를 노출하지 않는 이유는 알 수 없습니다.

+0

CSLA는 비즈니스 계층이 아닙니까?제가 제기 한 질문은 발표에 관한 것입니다. 내 비즈니스 개체가 프레젠테이션 계층에 노출되지 않습니다. – David

+0

@fretje 나는 isDirty 속성을 DTO에 넣으면 더 이상 DTO가 아닌 것에 동의합니다. 그래서이 기초에서 나는 그렇게하는 것이 실제로 잘못된 것이라고 생각할 것입니다. 그래서 DTO에서 데이터를 추출한 다음 프레젠테이션 목적으로 다른 객체에 밀어 넣는 경우가 될 것인지 질문했습니다. 이 주제에 대한 많은 논란이 있음에도 불구하고, 필자의 특정 구현체는 도메인 객체를 표현 레이어에 노출시키지 않는다. – David

1

내가 한 일은 사용자가 데이터 수정을 시도한 경우보기 자체에서 추적 할 수 있습니다. 이 경우보기 데이터가 변경되었고 발표자가이 이벤트를 사용하여 저장 버튼을 활성화/비활성화 할 수 있음을 발표자에게 알릴 수 있습니다. 이것은 내가 찾은 가장 간단한 해결책입니다. 그렇지 않으면 DTO/Data 객체 자체에 대한 변경 추적이 필요합니다.

관련 문제