在我们的系统中,我们有许多类,其构造必须异步发生。我们将构造过程包装在另一个派生自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
实例的类”,而不是“表示构建另一个类的失败尝试的类”。
我觉得它应该以其中一种设计模式命名,例如Proxy
或Adapter
,但我不确定是哪一种。
编辑:我应该明确表示我正在寻找一个坚持理想的GoF设计模式之一的答案,或其他一些完善的命名约定性质。
答案 0 :(得分:5)
要回答你的文字问题,我可能会选择ConstructorFailure
,因为它描述了失败的事件。
但是,我可能更进一步,使其成为Exception
,在这种情况下,ConstructorException
听起来不会太糟糕。你有什么理由想要退回而不是抛弃它吗?
答案 1 :(得分:3)
我将NullConstructor命名为null对象模式,这是您正在使用的模式。见http://en.wikipedia.org/wiki/Null_Object_pattern
答案 2 :(得分:2)
抛出异常。那就是如果我正确理解你的描述并且不是异步完成IConstructor对象的创建。
虽然如果你没有可用的例外,我可能会称之为ConstructorCreationError
。是的,它确实传达了故障模式,但更确切地说,它正在传达发生的特定错误。另外,对我来说,将构造函数作为最后一个词,似乎给出了错误的含义,但你也可以将“构造函数”放在最后。
您也可以使用SpawnConstructorError
,ConstructorGenerationError
等内容替换动词“创作”,或者如果您是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
来描述该课程的作用。