簡體   English   中英

容器類成員交互

[英]container class member interaction

我想獲得一些有關如何改善整體程序設計的建議。

我有一個主要的班級,有兩個經常需要互相交流的成員。 這個類似於容器的類具有一個Initialize()函數,該函數初始化兩個成員,而其他函數則提供對外界的訪問:

class Foo {
public:
    bool InitializeAandB();
    void UseFoo();

private:
    TypeA a;
    TypeB b;
};

在調用UseFoo()之后的某個時刻, a將需要調用b的公共函數之一。 因此,假設TypeA具有這樣的成員函數:

void TypeA::Function() {
    if (true) {
        TypeB *bpointer;
        bpointer->Interact(); // Need pointer to b here.
    }
}

TypeATypeB是單獨的實體,不能合並為一個類。 碰巧的是,這些分離的實體需要在不同的時間相互交互。

我不想公開ab因為它們不應在外界看到。 Foo中將TypeATypeB添加為朋友似乎是一個錯誤修復。 這也不是理想的,因為當TypeATypeB只需要彼此了解時,他們都需要了解Foo 公共GetA()GetB()訪問器函數也是如此。

第三種選擇是將TypeB*成員添加到TypeA ,將TypeA*成員添加到TypeB ,這是在InitializeAandB()期間設置的。 但這在某種程度上似乎是多余的,例如我缺少更好的總體設計。

有沒有更好的方法來設計這個?

如何將TypeB *作為參數傳遞給TypeA::Function() (反之亦然)?

依賴注入是我能想到的唯一選擇。

我同意@CreativeMind。 您應該在這里使用DI容器。

將初始化階段重構為單獨的類,並用AB實例填充您的DI容器。 從實現中提取接口,並將其作為合同放置在某處。 現在它們是服務,可以互相詢問容器。

Foo現在可以通過容器使用相同的方式使用AB

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM