2009-01-28 56 views
3

根據預定義的簽名,我必須實現一組60個函數。它們必須是全局函數,而不是某些類的成員函數。當我實施它們時,我使用第三方提供的一組很好的課程。在全局函數或全局函數封裝的類中執行

我對大多數函數的實現很短,大概有5-10行,主要處理對第三方類的不同訪問。對於一些更復雜的函數,我創建了幾個處理所有複雜東西的新類,並將它們用於函數中。所有的狀態信息都存儲在我的和第三方的類的靜態成員中,所以我不必創建全局變量。

問題:如果我用60個成員函數實現一個大類,並且在那裏執行所有的實現(現在在全局函數中)會更好嗎?而且我必須寫的每個函數都會調用該類中相應的成員函數。

回答

4

所有的狀態信息都存儲在我的和第三方的類的靜態成員中,所以我不必創建全局變量。

這是關鍵。不,他們絕對不應該上課。類用於創建對象。在你的情況下,你可以將它們當作範圍,用於數據和功能。但是,這是什麼命名空間已經解決好:

namespace stuff { 
    ... 60 functions ... 
    namespace baz { 
     ... if you want, you can have nested namespaces, to ... 
     ... categorize the functions ... 
    } 

    namespace data { 
     ... you can put data into an extra namespace if you want ... 
    } 
} 

創建可只包含靜態成員純粹課是一個壞主意。

0

我認爲「一流一責任」規則應該引導你到這裏。這60個職能大概可以分成不同的職責,每個職位都值得一個班級。這也將爲API的客戶端提供更多的OO接口,而不受全局功能需求的限制。

+0

@On,你是在暗示60個方法的60個方法?正如前面的迴應所建議的那樣,這些函數需要被包裝在一個名稱空間中,而不是用類來瘋狂。 – Jagannath 2010-01-03 10:00:30

+0

當然不是,但是有60個班,肯定會有一些不同的責任(可能在4到15之間)。 – 2010-01-03 18:43:30

2

你的代碼的用戶真的需要這個大班嗎?

如果是,執行它。

如果不是,不要浪費時間來實現它,不要浪費其他人強制測試它的時間,或者試圖瞭解除了OOP外觀之外,這個類的確切作用。

1

litb可能是正確的。你甚至會考慮圍繞一堆免費函數包裝class的唯一原因是如果你需要附加一些自己的數據用於你的包裝。彈出到我腦海中的唯一情況是需要處理日誌文件或類似的包裝。

在相關說明上,打對using namespace stuff;的誘惑!而不是

#include <stuff.h> 
void some_function() { 
    stuff::function_wrapper(); 
} 

#include <stuff.h> 
using namespace stuff; 
void some_function() { 
    function_wrapper(); 
} 

的好處是,如果你需要將namespace轉換爲一類充滿static方法,你可以做到這一點始終使用名稱空間限定是指功能容易。