2011-08-09 56 views
0

我想了解Pro &缺点通过Singleton类对VB.Net中的类的共享(静态)成员使用常用方法。它可能是时间,空间复杂性或最佳实践。哪一个更好Singleton类或共享(静态)成员函数

我有一个BankAccount类,有一些业务逻辑的方法。

GetBalance() 
GetLast5Credits() 
GetMiniStatement() 

也有一些写操作。

在这种情况下,访问成员函数的哪种方法更好?共享或单身?

+0

这确实是重复的,但我懒得搜索。 – CodesInChaos

回答

1

这取决于您的应用程序中是否有多个BankAccount。 基本上,Static或Singleton意味着您只能有一个有问题的对象实例 - 在本例中为BankAccount。如果你问我,只有一个BankAccount的银行是一家很差的银行。 :) Here是一个相当不错的解释,但示例代码是在C#

4

都没有。你应该使用一个依赖注入的实例。即,您不会构建代码中只有一个实例的假设。你恰好创建了一个实例。这样,您可以将软件更改为轻松使用多个实例。

这里的基本想法是,你把银行账户作为你的类的构造函数的参数:

class MyClass 
{ 
    private readonly IBankAccount bankAccount; 

    public MyClass(IBankAccount bankAccount) 
    { 
    this.bankAccount=bankAccount; 
    } 
} 

由于手动创建这样的一个类可以是恼人,如果你需要大量的传递你通常使用依赖注入/ IoC容器为你做。


静态方法应该用于无状态的无副作用辅助函数。 MathEnumerable有很好的静态方法的例子。

一般来说,你应该避免全局可变状态。而且一个银行账户显然是可变的。这里一个典型的单身人士是较小的邪恶(你可以用实现代替测试目的),但这仍然是一个不好的选择。

+0

+1,但是一个例子或至少一个链接可以帮助人们理解“依赖注入实例”的含义。 –

0

就个人而言,我更喜欢singleton类为了单元测试。你可以模拟一个实例类,但是你不能模拟一个静态类。

1

我不相信你想要么在这里...

但以供将来参考,共享类,你把它不应该有任何与维护状态 - 每个静态方法应该只与工作传入的参数。这使得这种类仅适用于实用程序功能。

如果您在内存中持续保存与帐户有关的数据,则单身人士只能在此处使用。然后你可能实现一个单身作为索引器,包含银行帐户记录的集合,但你必须注意竞争条件。