如何构建许多功能类希望访问同一类的应用
本文关键字:一类 应用 访问 多功能 何构建 构建 希望 | 更新日期: 2023-09-27 18:35:51
我需要架构建议。
我有两个类:
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 对象传递给需要更改页面的类。
但是,为许多其他类提供对同一类的访问权限的最佳方式是什么?
实际上,将 Shell 类传递给需要它的其他类的解决方案还不错,特别是如果您通过构造函数执行此操作。
当然,最常见的方法是使用单例或具有静态方法的类。但如果你说实话,在这种情况下,他们都只不过是蒙面的全球状态。
单例的最初目的是确保一个类只有一个对象存在,而不是使某些对象易于访问。然而,后者是开发人员使用它的最常见原因。其他人因此称其为"反模式之王":)
老实说,在某些情况下,我自己同时使用单例和静态方法,以使我的生活更轻松(在短期内)。但我从来都感觉不好。
总而言之,据我所知,您有三个基本选择:
- 在构造函数中传递对象
- 单身 人士
- 静态方法
所有这些都有其优点和缺点,但我认为第一个解决方案是最干净的,因为它不会引入全局状态。
您可能需要考虑使用单例设计模式:
https://msdn.microsoft.com/en-us/library/ff650316.aspx
选择完全满足您要求的产品。
你可以把你的 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);
}
}
同样有一个二传手 ChangePage,你应该将你的 CurrentPage 设为私有。否则,您有两种方法可以更改当前页面:使用二传手ChangePage(page)
,以及使用 CurrentPage = page
,这不好。我也把你的二传手ChangePage
重命名为SetCurrentPage
,所以现在很明显它是一个二传手