2008-11-03 9 views
5

웹 페이지에 Model-View-Presenter 패턴을 사용하고 있습니다. 발표자는 세션을 알고 있어야합니까? 아니면보기 만이이를 알고 있어야합니까?MVP - 발표자가 세션을 사용해야합니까?

저는 세션과 같은 개념이 뷰의 아키텍처와 매우 관련되어 있으므로 뷰에서 사용하도록 제한해야한다고 생각합니다. 그렇지 않은 경우 다른 아키텍처의 유사한 페이지에서 발표자를 재사용하고 싶다면 어떻게 될까요? (그렇게 할 계획이 없다면 걱정할 필요가 없습니까?)

답변

8

MVP 구현에서 ICookieManager, ISessionManager, ICacheManager, IConfigurationManager, IRedirector를 내 발표자에게 주입합니다.이 기능은이 기능을 래핑하는 클래스에서 구현됩니다.

이렇게하면 조롱 한 버전을 삽입 할 수 있고 발표자의 asp.net 런타임에 직접 의존하지 않으므로 테스트가 더 쉬워집니다.

건배

우리가 실제로 발표자 (바람직하게는 인터페이스를 통해) 세션의 데이터에 액세스 할 수 있어야하고,해야한다고 말하고있는 답변 모두에 대한
0

재사용하려고하는 대상에 따라 다르거 나 그렇지 않으면 대부분의 비즈니스 논리를 포함합니다.

발표자 만 MVP의 컨트롤러에 가장 가까운 개체이므로 세션을 알아야한다고 가정합니다.

2

사용중인 세션에 래퍼 역할을하는 공유 모듈 일 수도 있습니다. 이렇게하면 모든 컨트롤러에서 사용할 수 있으며 세션의 실제 구현을 간단하게 변경할 수 있습니다.

발표자는 세션에서 컨트롤러가 가져온 내용으로보기를 채 웁니다.

0

예, 비둘기가 말했듯이 다른 클래스의 세션에 액세스하는 내용은 무엇이든지 둘러 쌀 수 있습니다.

즉, Session의 다른 값을 시뮬레이션하기 위해이 유형의 모의 클래스를 삽입 할 수 있습니다.

질문에 좀 더 구체적으로 답하기 위해 필자는 감독 - 발표자 패턴 (http://martinfowler.com/eaaDev/SupervisingPresenter.html)으로 이동하는 경향이있어보기를 매우 바보로 유지합니다. 따라서 발표자 만이 세션에 액세스 할 수 있습니다 (이전에 말한 것처럼 직접적으로는 아니지만).

1

감사합니다, 이렇게 요약 할 수 ... 그 그것을 액세스해서는 안되는 뷰 (나머지 바보)?

+0

그건 제 의견입니다. 그렇습니다. – Duncan

0

수동 MVP 접근 방식도 연구 중입니다. 나는 웹에서 수행 된 몇 가지 작업을 보았습니다. 둘 다 세션 지속성을 뷰로 가져 왔습니다. 비둘기가 언급 한 바와 같이 주입을 통해 또는 명시 적으로 관리됩니다.

의존성 주입 예는 여기에서 볼 수 있습니다 : http://www.codeproject.com/KB/aspnet/Advanced_MVP.aspx 및 여기 : http://geekswithblogs.net/opiesblog/archive/2006/06/30/83743.aspx. 여기있는 트릭은 정적 변수에서 모든 세션 인스턴스를 관리하고 서로 겹쳐 쓰지 못하게하는 것입니다. 첫 번째 예제가 제대로 수행되는지는 잘 모르겠습니다.

두 번째 방법은 http://codebetter.com/blogs/jeffrey.palermo/archive/2005/03/28/128592.aspx입니다. 이 예제에서 뷰는 상태를 저장하는 방법을 알고 있습니다. 단점은 발표자가보기에 데이터를 넣을 때마다보기에서 Update 메서드를 호출하여 리 바인딩을 강제해야한다는 것입니다.위의 예에서는 필요하지 않지만 세션 테이블을 관리 할 필요는 없습니다. 이 접근법이 어떻게 조롱 도구로 테스트를 복잡하게하는지 잘 모르겠습니다.

0

팁은 모든 소모품을 연결합니다. 발표자와 모델을 조롱으로 테스트하고 동작에 테스트를 집중시키는 것이 더 쉽습니다.

관련 문제