将模型类或setter属性与MVP一起使用

时间:2011-04-22 19:46:26

标签: c# .net mvp

我正在使用setter属性创建我的应用程序,例如

public interface IUserRegistrationView
{
    string DisplayName { set; }
    string EmailAddress { set; }
}

但我不确定这是不是一个好方法......

也许我应该在Presenter类上创建一个Model属性?

你有什么建议?

谢谢!

2 个答案:

答案 0 :(得分:2)

您正在做的事情将完成工作,但仅限设置属性是一种气味。你的setter,没有getter,本质上是方法伪装成属性,工作但没有多少意义

首先,因为视图没有理由知道有关演示者的任何内容,所以没有理由创建演示者并将其注入其中。相反,在组合根处创建具体视图,然后在具有视图构造函数的具体呈现器中注入。然后,演示者可以监听视图界面中定义的事件,以便演示者和视图尽可能松散耦合。

第二次,我会将setter 属性更改为SetDisplayNameSetEmailAddress方法,但前提是演示者可以更新视图显示后,而不仅仅是显示静态数据。否则我会完全删除它们。请记住,可能YAGNI

第三次,我通过视图的Show方法传达要在视图中显示的初始数据的主要方式是这样的:

public class UserRegistrationInfo
{
    string DisplayName { get; set; }
    string EmailAddress { get; set; }
}

public interface IUserRegistrationView
{
    void SetDisplayName(string name);
    void SetEmailAddress(string name);

    // ... events for the presenter to hook into.

    void Show(UserRegistrationInfo info);
}

答案 1 :(得分:0)

如果您打算以通常的方式使用此接口,而其他类可以使用它,那么它是更好的方法。如果您专门创建接口,那么在presenter类中创建属性不是一个好方法。 根据这个IUserRegistrationView,我建议在业务逻辑层中创建这些属性,并从presenter层设置这些属性。