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

C# 将模型类或setter属性与MVP一起使用,c#,.net,mvp,C#,.net,Mvp,我使用setter属性创建我的应用程序,比如 public interface IUserRegistrationView { string DisplayName { set; } string EmailAddress { set; } } 但我不确定这是不是一个好方法 也许我应该在Presenter类上创建一个模型属性 你有什么建议 谢谢 如果您打算以常规方式使用此接口,而其他类可以使用此接口,那么这是更好的方法。如果您打算专门创建接口,那么在presenter类中创建属

我使用setter属性创建我的应用程序,比如

public interface IUserRegistrationView
{
    string DisplayName { set; }
    string EmailAddress { set; }
}
但我不确定这是不是一个好方法

也许我应该在Presenter类上创建一个模型属性

你有什么建议


谢谢

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

您所做的将完成任务,但仅设置属性是一种气味。没有getter的setter本质上是伪装成属性的方法,虽然有效,但意义不大

首先,因为视图没有任何理由知道演示者的任何信息,所以它没有理由创建演示者并将自己注入其中。相反,在合成根目录下创建具体视图,然后在其中注入视图构造函数的具体演示者。然后,演示者可以侦听视图界面中定义的事件,以便演示者和视图尽可能松散地耦合

Second,我会将setter属性更改为
SetDisplayName
SetEmailAddress
方法,但前提是演示者可以在显示视图后更新视图,而不仅仅是显示静态数据。否则我会把它们全拿走。记住这一点

第三种,通过视图的
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);
}

这可能是我现在的做法,表示层将是asp.net web应用程序或mvc,还不确定。我将在webcontrol上实现该接口…如果要在web控件上实现,请将其设置为业务层属性。那太好了你到底想达到什么目的?