繁体   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