2010-06-22 25 views
3

我一直在想我最好的辦法來刪除我愚蠢地添加的單身人士。對於背景,這個應用程序是一個股票投資組合跟蹤。目前,我有我本以爲這是唯一的實例三類:將單身人士的班級轉換爲上下文的類型

  1. 價格(一類抱着 的歷史價格,股息, 分裂列表)
  2. 投資組合(A類管理 組合的集合一些有用 包裝函數)
  3. 查詢的對象(一個 類讀取和寫入到數據庫 )

爲了滿足用戶的需求,我添加了從多個數據庫打開和保存的功能。理論上,每個數據庫(查詢類)都將傳遞到Portfolios和Prices的構造函數中以加載數據。

我面臨的問題是所有3個類都是相互關聯的。如果我打開C:\ database1.sqlite,我不應該能夠從C:\ database2.sqlite中混合匹配價格和投資組合。此外,任何編輯必須保存到適當的數據庫。

我最初的想法是創建一個由這些類組成的上下文對象並傳遞它。但是,閱讀Can you explain the Context design pattern?,我不認爲這是正確的解決方案。

如何刪除單例,但仍保持對象之間的完整性?謝謝。

+2

如果您的查詢圖層與您的價格或投資組合類有任何關聯,那麼您的設計就會出現嚴重錯誤。我知道這可能太晚了,但是你的設計似乎有一個非常根本的缺陷,不管使用Singleton模式。 – Serapth 2010-06-22 23:33:49

+0

無論這種「上下文模式」是什麼樣子,您提到的問題的鏈接都是死的,而且該模式還不夠流行,無法在谷歌搜索中顯示出來。一旦你解決了奇怪的相互依賴關係,只需實例化高級對象,並將引用傳遞給任何需要它們的對象。 – 2010-06-22 23:43:34

+0

Serapth,Queries圖層不知道價格或投資組合類,但價格和投資組合類使用它來加載並保存到數據庫。 – Matt 2010-06-22 23:45:30

回答

2

我會考慮你將從「複數」轉變爲「單數」的變化。如果你的對象是事物而不是事物的數量,那麼推理你的系統會容易得多。

E.g.

class Price; 
class Portfolio; 
class Query; 

如果有必要,以後可以隨時添加:

typedef std::vector<Price> Prices; 
typedef std::vector<Portfolio> Portfolios; 
typedef std::vector<Query> Queries; 

,但我的愚見是,你或許應該制定出你想要的這些東西單一實例之間的相互作用,然後去了當你有一對多的關聯時(即這些類​​的一個實例是否指向另一個的多個實例?),然後再明確地定義它們之間的交互。

基本上,力求使關於交互的推理變得簡單。你可能有許多價格和投資組合,但是要記住一個實例的操作與幾個實例的操作相比很難,所以分解這些差異並保持事物的實例簡單明瞭。