我想了解Pro&通过Singleton类使用常用方法来对抗VB.Net中类的共享(静态)成员。它可以是时间,空间复杂性或最佳实践。
我有一个BankAccount类,其方法可以执行一些业务逻辑。
GetBalance()
GetLast5Credits()
GetMiniStatement()
以及一些写操作。
在这种情况下,访问成员函数的方法更好?共享还是单身?
答案 0 :(得分:4)
都不是。您应该使用依赖注入实例。即你没有建立代码中只有一个实例的假设。您恰好创建了一个实例。这样您就可以轻松地将软件更改为使用多个实例。
这里的基本想法是您将银行帐户作为类的构造函数中的参数:
class MyClass
{
private readonly IBankAccount bankAccount;
public MyClass(IBankAccount bankAccount)
{
this.bankAccount=bankAccount;
}
}
由于手动创建这样的类可能很烦人,如果你需要传递很多东西,你通常会使用依赖注入器/ IoC容器为你做这件事。
静态方法应该用于无状态的副作用自由辅助函数。 Math
和Enumerable
有很好的静态方法示例。
一般来说,你应该避免全局可变状态。银行账户显然是可变的。在这里,经典的单例是较小的邪恶(你可以用实现代替测试目的),但它仍然是一个糟糕的选择。
答案 1 :(得分:1)
取决于您的应用程序中是否有多个BankAccount。 基本上,Static或Singleton意味着你只能有一个对象的实例 - 在这种情况下是BankAccount。如果你问我,只有一个BankAccount的银行是一个非常差的银行。 :) Here是一个相当不错的解释,但示例代码在C#
答案 2 :(得分:1)
我不相信你想在这里......
但是为了将来的参考,你所说的共享类与维护状态没有任何关系 - 每个静态方法只应该与传入的参数一起使用。这使得这种类只对实用程序函数有用。 / p>
如果您在内存中持久保存与帐户相关的数据,则单例只在此处有用。然后你可以实现单身作为索引器,包含一系列银行账户记录,但你必须注意竞争条件。
答案 3 :(得分:0)
就个人而言,我更喜欢单一类,以便进行单元测试。您可以模拟实例类,但不能模拟静态类。