簡體   English   中英

我該如何命名該類的唯一目的是報告失敗?

[英]What do I name this class whose sole purpose is to report failure?

在我們的系統中,我們有許多類的構造必須異步進行。 我們將構造過程包裝在另一個從IConstructor類派生的類中:

class IConstructor {
    public:
        virtual void Update() = 0;
        virtual Status GetStatus() = 0;
        virtual int GetLastError() = 0;
};

當前系統的設計存在一個問題-創建IConstructor派生類的函數通常會做額外的工作,這也可能會失敗。 在這一點上,沒有得到可以查詢錯誤的構造函數,而是返回了NULL指針。

重組代碼來避免這種情況是可能的,但是很耗時。 同時,我決定創建一個構造函數類,如果有錯誤我們將創建並返回該構造函數類,而不是NULL指針:

class FailedConstructor : public IConstructor
    public:
        virtual void Update() {}
        virtual Status GetStatus() { return STATUS_ERROR; }
        virtual int GetLastError() { return m_errorCode; }
    private: int m_errorCode;
};

以上所有這些都是一個世俗的問題的設置:我如何命名FailedConstructor類? 在我們當前的系統中, FailedConstructor將指示“一個構造Failed實例的類”,而不是“一個表示構造另一個類的嘗試失敗的類”。

我覺得應該為其中一種設計模式(例如ProxyAdapter命名,但是我不確定是哪一種。

編輯:我應該清楚地表明,我正在尋找一種答案,理想情況下,該答案應遵循一種GoF設計模式,或針對這種性質的其他一些公認的命名約定。

為了回答您的字面問題,我可能會使用ConstructorFailure ,因為它描述了失敗的事件。

但是,我可能會更進一步,將其設置為Exception ,在這種情況下, ConstructorException聽起來不太破舊。 您有什么理由要返回此而不是將其拋出?

我將其命名為NullConstructor以與空對象模式(您正在使用的模式)一致。 參見http://en.wikipedia.org/wiki/Null_Object_pattern

引發異常。 也就是說,如果我正確理解了您的描述並且IConstructor對象的創建不是異步完成的。

雖然如果您沒有可用的例外,我可能會稱其為ConstructorCreationError 是的,它確實傳達了一種故障模式,但更准確地說,它是在傳達發生的特定錯誤。 另外,對我來說,以構造函數為最后一個詞似乎給出了錯誤的含義,但是您也可以在最后加上“ constructor”。

您也可以用SpawnConstructorErrorConstructorGenerationError類的詞來代替動詞“ Creation”,或者如果您是Chevalier博士的粉絲,也許是ErroneousConstructor

我選擇DummyConstructor是因為它的唯一目的是模擬一個有效的Constructor實例,但是它沒有實現任何實際功能。

FailureResponseConstructor?

您不是在創建失敗,而是在創建對失敗的響應。 因此,我認為任何與“響應”或“響應”的同義詞都是可行的。

如果您願意花費精力檢查針對“ FailureConstructor”的返回指針,我看不出為什么您無法針對NULL檢查它的原因?

除非您的系統旨在相互掩蓋組件故障,否則假設每個關聯的部件都工作正常就沒有任何意義。

我將根據Niall C.的評論進行處理FailedConstructorProxy 代理模式似乎最適合此類。 盡管它不是將方法調用中繼到一個對象,而是站在並生成我們希望實際構造函數返回的內容。

(如果有人給出了更正確的答案,請將其發布,然后我將其標記為已接受。我仍然不是100%確信這是正確的名稱!)

為什么不創建一個Failed類來表示構造失敗並與FailedConstructor一起使用的FailedConstructor呢? 這樣命名是一致的。

我建議調用此類的FailedObjectConstructionHandler來描述該類的功能。

暫無
暫無

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

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