如何构建许多功能类希望访问同一类的应用

本文关键字:一类 应用 访问 多功能 何构建 构建 希望 | 更新日期: 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,所以现在很明显它是一个二传手