【发布时间】:2018-07-02 06:11:29
【问题描述】:
我在生产代码中遇到了以下概念:
class A
{
public:
class Exception : public std::exception
{/* ... */};
//...
};
没有人可以给我一个明确的答案,为什么会这样。我的问题是这种方法是否符合 SOLID 规则?我认为如果这个异常类位于类 A 之外并在创建 A 的实例时注入会更好。
【问题讨论】:
-
设计原则很重要,但没有遵循“因为它们是设计原则”。他们被追随是因为他们完成了一些事情。在构造时注入异常对象会完成什么?现在这个类应该管理这个对象的生命周期。如果从未遇到过错误状态并且从未抛出过错误状态怎么办?
-
你是对的。注入不是必需的,因为独立的异常类将“以正常方式”对 A 类可用。但是,我仍然无法解释为什么异常类应该是 A 类的成员。
-
我认为如果您继续执行您的建议,您会找到答案。
-
如果是
A特有的错误,写catch(A::Exception const& e) {..}感觉有点“干净”。取决于可以重复使用多少错误或特定于A。我认为没有一个包罗万象的答案。这取决于所讨论的类型,并且在很大程度上是一个判断电话。但我个人认为错误是类接口的一部分。
标签: c++ oop object solid-principles