我怎么命名这个班级的唯一目的是报告失败?

时间:2010-06-03 00:32:23

标签: c++ design-patterns naming-conventions

在我们的系统中,我们有许多类,其构造必须异步发生。我们将构造过程包装在另一个派生自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设计模式之一的答案,或其他一些完善的命名约定性质。

9 个答案:

答案 0 :(得分:5)

要回答你的文字问题,我可能会选择ConstructorFailure,因为它描述了失败的事件。

但是,我可能更进一步,使其成为Exception,在这种情况下,ConstructorException听起来不会太糟糕。你有什么理由想要退回而不是抛弃它吗?

答案 1 :(得分:3)

我将NullConstructor命名为null对象模式,这是您正在使用的模式。见http://en.wikipedia.org/wiki/Null_Object_pattern

答案 2 :(得分:2)

抛出异常。那就是如果我正确理解你的描述并且不是异步完成IConstructor对象的创建。

虽然如果你没有可用的例外,我可能会称之为ConstructorCreationError。是的,它确实传达了故障模式,但更确切地说,它正在传达发生的特定错误。另外,对我来说,将构造函数作为最后一个词,似乎给出了错误的含义,但你也可以将“构造函数”放在最后。

您也可以使用SpawnConstructorErrorConstructorGenerationError等内容替换动词“创作”,或者如果您是Chevalier博士的粉丝,可以ErroneousConstructor

答案 3 :(得分:1)

我会选择DummyConstructor,因为它的唯一目的是模拟有效的Constructor实例,但它没有实现真正的功能。

答案 4 :(得分:0)

FailureResponseConstructor?

您没有创建失败,您正在创建对失败的响应。因此,我认为“回应”或“回应”的任何同义词都可以。

答案 5 :(得分:0)

如果你愿意花费精力检查返回的指针对“FailureConstructor”,我不明白为什么你不能用NULL检查它?

除非你的系统设计用于掩盖彼此之间的组件故障,否则假设每个相关部件都运行良好是没有意义的。

答案 6 :(得分:0)

我将根据Niall C.的评论 - FailedConstructorProxy。代理模式似乎最适合这个类;虽然它不是将方法调用转发给一个对象,但它代表了我们想要的要返回的实际构造函数。

(如果某人有更正确的答案,请将其发布,我会将其标记为已接受。我仍然不是100%确信这是正确的名称!)

答案 7 :(得分:0)

为什么不创建一个Failed类来表示构造失败的类并使用FailedConstructor?这样命名就是一致的。

答案 8 :(得分:0)

我建议调用此类 FailedObjectConstructionHandler 来描述该课程的作用。