2011-08-09 81 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

我不相信你想要麼在這裏...

但以供將來參考,共享類,你把它不應該有任何與維護狀態 - 每個靜態方法應該只與工作傳入的參數。這使得這種類僅適用於實用程序功能。

如果您在內存中持續保存與帳戶有關的數據,則單身人士只能在此處使用。然後你可能實現一個單身作爲索引器,包含銀行帳戶記錄的集合,但你必須注意競爭條件。