我需要建筑建议。
我有两个班级:
public class Shell
{
public IPage CurrentPage { get; set; }
public void ChangePage(IPage page)
{
CurrentPage = page;
}
}
public class SomeFunctionallityClass
{
private readonly Shell _shell;
private readonly IPage _somePage;
public Model1(Shell shell, IPage page)
{
_shell = shell;
_somePage = page;
}
public void MakeSomeCrazyStuff()
{
_shell.ChangePage(_somePage);
}
}
在Shell类中,我有一个CurrentPage属性,这是应用程序中很多类想要访问的属性。
现在我将Shell对象传递给需要更改页面的类。
但是,为许多其他类提供访问同一个类的最佳方法是什么?
答案 0 :(得分:1)
实际上,将Shell类传递给需要它的其他类的解决方案并不算太糟糕,特别是如果你通过构造函数执行它。
当然,最常见的方法是使用Singleton或使用静态方法的类。但如果你是诚实的,在这种情况下,他们两个都只是蒙面的全球状态。
单例的最初目的是确保只存在一个类的一个对象,而不是使某些东西易于访问。然而,后者是开发人员使用它的最常见原因。因此其他人称之为“反模式之王”:)
老实说,在某些情况下,我自己同时使用Singleton和静态方法,以使我的生活更轻松(在短期内)。但我从未对此感到满意。
总结一下,据我所知,你有三个基本选择:
所有这些都有其优点和缺点,但我认为第一个解决方案最干净,因为它没有引入全局状态。
答案 1 :(得分:0)
您可以将Shell设为静态:
public static class Shell
{
private static IPage CurrentPage { get; set; }
public static void SetCurrentPage(IPage page)
{
CurrentPage = page;
}
}
public class SomeOtherClass
{
public vod ShowShellPropery()
{
MessageBox.Show(Shell.Property);
}
}
还有一个setter ChangePage,你应该将你的CurrentPage设为私有。否则,您有两种方法可以更改当前页面:使用setter ChangePage(page)
和CurrentPage = page
,这样做并不好。我还将你的二传手ChangePage
重命名为SetCurrentPage
,所以现在很明显它是一个二传手
答案 2 :(得分:0)