문제

웹페이지에 Model-View-Presenter 패턴을 사용하고 있습니다.발표자는 세션을 인식해야 합니까, 아니면 뷰만 인식해야 합니까?

내가 얻은 것은 세션과 같은 개념이 뷰의 아키텍처와 매우 관련되어 있으므로 뷰에서 사용하도록 제한해야 한다는 것입니다.그렇지 않고 다른 아키텍처의 비슷한 페이지에서 프리젠터를 재사용하고 싶다면 어떻게 될까요? (또는 그렇게 할 계획이 없다면 걱정할 필요가 없나요?)

도움이 되었습니까?

해결책

MVP 구현에서 이와 같은 작업을 수행하고 있습니다. ICookieManager, IssessionManager, IcacheManager, IconFigurationManager, Iredirector를 발표자에 주입하여 기능을 감싸는 클래스에 의해 구현됩니다.

이를 통해 발표자는 이들의 조롱 된 버전을 주입 할 수 있으며 발표자의 ASP.NET 런타임에 대한 직접적인 의존성이 없으므로 테스트가 더 쉬워집니다.

건배

다른 팁

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

발표자는 세션에서 컨트롤러가 가져온 모든 항목으로 뷰를 채웁니다.

답변 해 주셔서 감사합니다. 요약 해 주셔서 감사합니다.

우리는 실제로 발표자라고 말하고 있습니까? ~해야 한다 세션 (바람직하게는 인터페이스를 통해 데이터에 액세스하지 말아야 할보기) (멍청한 멍청한)에 액세스 할 수 있습니까?

재사용하려고하거나 대부분의 비즈니스 로직을 포함하려는 객체에 따라 다릅니다.

나는 그 개체가 MVP의 컨트롤러에 가장 가까운 것이기 때문에 발표자 만 세션을 알아야한다고 가정합니다.

예, Dove가 말했듯이 다른 클래스에서 세션에 액세스하는 모든 것을 감싸십시오.

즉,이 유형의 모의 클래스를 주입하여 세션의 다른 값을 시뮬레이션 할 수 있습니다.

더 구체적으로 귀하의 질문에 답하기 위해, 나는 감독-선발 패턴을 찾는 경향이있다 (http://martinfowler.com/eaadev/supervisingpresenter.html), 이것은보기를 매우 멍청하게 유지합니다. 따라서 발표자만이 세션에 액세스하고 (이전에 말한대로 직접적으로는 아니지만) 무엇을 해야하는지 알 수 있습니다.

저는 패시브 MVP 접근 방식도 연구하고 있습니다.나는 웹에서 수행된 몇 가지 작업을 보았습니다. 두 작업 모두 세션 지속성을 뷰에 맡깁니다. 즉, dove가 언급한 주입이나 명시적 관리를 통해 이루어졌습니다.

종속성 주입 예제는 여기에서 볼 수 있습니다. 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 메서드를 호출해야 한다는 것입니다.위의 예에서는 이것이 필요하지 않지만 세션 테이블을 관리할 필요는 없습니다.이 접근 방식이 모의 도구를 사용한 테스트를 어떻게 복잡하게 만드는지 잘 모르겠습니다.

팁은 모든 소모품 엔티티를 인터페이스하는 것입니다. 발표자와 모델을 조롱으로 테스트하기 쉽고 행동에 대한 테스트에 집중할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top