如何构建一个应用程序,其中许多功能 classes 想要访问相同的 class?
How to architecture an app where many functionality classes want to have access to same class?
我需要架构方面的建议。
我有两个 classes:
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 class 我有一个 CurrentPage 属性 这是 属性 应用程序中的很多 classes 想要访问到。
现在我将 Shell 对象传递给需要更改页面的 classes。
但是让许多其他 class 访问相同 class 的最佳方式是什么?
您可以使您的 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
,这是不好的。另外我把你的setterChangePage
重命名为SetCurrentPage
,所以现在很明显是setter
您可能需要考虑使用单例设计模式:
https://msdn.microsoft.com/en-us/library/ff650316.aspx
选择完全符合您要求的一项。
实际上,您将 Shell class 传递给彼此 class 的解决方案需要它,并不算太糟糕,特别是如果您通过构造函数来实现。
当然,最常见的方法是使用单例或 class 静态方法。但是,如果你说实话,在这种情况下,它们都不过是蒙面的全局状态。
单例的初衷是确保一个class的对象只有一个存在,而不是为了方便访问。然而,后者是开发人员使用它的最常见原因。其他人因此称它为 "King of Antipatterns" :)
老实说,在某些情况下,我自己会同时使用 Singleton 和静态方法,以使我的生活更轻松(短期内)。但是我一直都觉得不好。
总而言之,据我所知,您有三个基本选择:
- 在构造函数中传递对象
- 单例
- 静态方法
所有这些都各有利弊,但我认为第一个解决方案最干净,因为它不引入全局状态。
我需要架构方面的建议。
我有两个 classes:
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 class 我有一个 CurrentPage 属性 这是 属性 应用程序中的很多 classes 想要访问到。
现在我将 Shell 对象传递给需要更改页面的 classes。
但是让许多其他 class 访问相同 class 的最佳方式是什么?
您可以使您的 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
,这是不好的。另外我把你的setterChangePage
重命名为SetCurrentPage
,所以现在很明显是setter
您可能需要考虑使用单例设计模式:
https://msdn.microsoft.com/en-us/library/ff650316.aspx
选择完全符合您要求的一项。
实际上,您将 Shell class 传递给彼此 class 的解决方案需要它,并不算太糟糕,特别是如果您通过构造函数来实现。
当然,最常见的方法是使用单例或 class 静态方法。但是,如果你说实话,在这种情况下,它们都不过是蒙面的全局状态。
单例的初衷是确保一个class的对象只有一个存在,而不是为了方便访问。然而,后者是开发人员使用它的最常见原因。其他人因此称它为 "King of Antipatterns" :)
老实说,在某些情况下,我自己会同时使用 Singleton 和静态方法,以使我的生活更轻松(短期内)。但是我一直都觉得不好。
总而言之,据我所知,您有三个基本选择:
- 在构造函数中传递对象
- 单例
- 静态方法
所有这些都各有利弊,但我认为第一个解决方案最干净,因为它不引入全局状态。