2010-06-05 18 views
0

我很難爲一組課程提出好的設計,並希望有人能給我一些最佳實踐指導。我一直保持類和成員函數的通用性,使問題更簡單。不確定如何拿出一個好的設計

從本質上講,我有三個類(讓我們稱之爲A,B,和C)如下:

class A 
{ 
public: 
    ... 
    int GetX(void) const { return x; }; 
    int GetY(void) const { return y; }; 

private: 
    B b; // NOTE: A "has-a" B 
    int x; 
    int y; 
}; 

class B 
{ 
public: 
    ... 
    void SetZ(int value) { z = value }; 
private: 
    int z; 
    C c; // NOTE: B "has-a" C 
}; 

class C 
{ 
public: 
    ... 
    void DoSomething(int x, int y){ ... }; 
    void DoSomethingElse(int z){ ... }; 
}; 

我的問題如下:

  • 類A使用它的成員變量「 x「和」y「很多。
  • B類在內部使用其成員變量「z」。
  • B類需要調用C :: DoSomething(),但C :: DoSomething()需要傳入的類A中X和Y的值作爲參數傳入。
  • C :: DoSomethingElse()從另一個類(例如D)調用,但它需要在類B!中調用SetZ()。

正如你所看到的,由於所有的類需要彼此的信息,所以它有點混亂!有什麼設計模式可以使用嗎?任何想法將不勝感激....

+5

您可以說明您的實際問題,而不使用非描述性名稱嗎? – 2010-06-05 14:28:17

+0

爲什麼不把你的DoSomethingElse和DoSomething放在A班? – 2010-06-05 14:33:48

+0

我同意Matti--會更容易建議一個關於這些類應該實現的信息的設計。 – DanK 2010-06-05 14:44:37

回答

1

您已經遺漏了很多可能會改變此建議的有效性的細節,但基於您展示的接口的子集,它看起來像B應該有A或可能來自A,而不是相反。

1

不幸的是,當你提出這一點,這是一個完整的混亂。

你在class C方法被定義爲private,因此,可以只在該類的其他方法(除非你想添加friend聲明,使你的依賴更甚)調用。

我也認爲你最好粘貼代碼沒有這些通用名稱,,因爲它可以幫助我們理解這個問題的領域,並提出了一些很好的架構建議。

記住了很多很好的應用架構的方法是已經發明和你其實不必重新發明他們,你應該只學習他們,讓習慣了。

+0

對不起,我錯過了「公衆「還有一個錯字......會更新這個例子。 – Mewzer 2010-06-05 14:57:16

相關問題