以下是我的代码的概要,它是一个中等复杂的WinForms GUI。
依赖关系的上下文是模型视图演示者模式。
public class StatSyncherFormView : Form, IView
{ ... }
public class Presenter
{
// Here is the member I made public
public readonly IView view;
public Presenter(IView view)
{
this.view = view;
}
}
static void Main()
{
IView view = new View();
Presenter presenter = new Presenter(view);
// Here is where I'm accessing the public member
Application.Run((Form)p.view);
}
1)我喜欢这样的事实,即视图仅由构造函数设置,之后不会被修改。它使我在多线程GUI开发环境中感觉更好。
2)public View {get; private set;}
然后我输了(不变性?)。
3)使用private readonly IView view
我还需要public View {get {return view;}}
感觉(对我来说,至少也许有人可以告诉我),这是多余的。
我的问题:我觉得(3)是避免使用公共会员的唯一方法,但在这种情况下我不理解其中的好处。
我意识到这是细枝末节,所以请提前感谢任何花时间给我建议的人。
答案 0 :(得分:4)
只需给Presenter一个Run()方法。
答案 1 :(得分:1)
您的第三种方法(我最喜欢)的好处包括:
IView
即可。这种转换可以在getter中进行。答案 2 :(得分:1)
这实际上只是公开可见字段与属性辩论的变体。
遵循标准指南(您的选项3)是大多数人会推荐的,尽管您称之为“冗余”。顺便说一下,我不确定你的冗余是什么意思
要输入的一些额外字符,或
运行时的额外getter方法(可能会被JITter优化掉)。
在任何情况下,“冗余”都不重要。
话虽如此,在你的具体案例中,Hans Passant的答案是完全避免对财产/领域的需要,这可能是最好的。
答案 3 :(得分:0)
如果使用公共字段,则无法在不重新编译程序集的情况下将其更改为属性。所以我认为最好通过使用属性在第一时间做到这一点。