接口和实现设计结构?
Interface and implementation design structure?
我对用 C++ 设计大型程序还很陌生。我正在编写一系列操作,每个操作都有自己的 class,它们将由 ProcessMgr
class 调用。
我正在使用 ProcessMgr
作为接口 class,可以从中调用每个操作:
class ProcessMgr
{
private:
class OperationOne;
class OperationTwo;
class OperationThree;
}
class ProcessMgr::OperationOne
{
public:
...
};
class ProcessMgr::OperationTwo
{
public:
...
};
class ProcessMgr::OperationThree
{
public:
...
};
这使我能够控制对 Operation
classes 的访问类型,因此不会暴露它们的大部分底层代码。
重要的是,此代码的用户只能以特定方式与 Operation
classes 交互,而不能完全访问 [=] 的所有内容15=] classes.
我的问题:
1) 这是设计大型程序的好方法吗?大多数库,例如 CURL,都是以这种方式构建的吗?
2) 是否有better/more 分离接口和实现的有效方法?
C++(或其他 OOP 语言)中的普通接口提供了定义。 "operation-classes" 必须从接口派生,以便将实现与客户端分离。这个原则叫做Dependency inversion principle(DIP).
DIP 中常见的 UML-diagram 如下所示:
由于Client只是熟悉Interface,所以可以控制对具体子类的访问。
实现可能如下所示:
class ProcessMgr {
virtual void foo() = 0;
virutal void bar() = 0;
}
class Operation1 : public ProcessMgr {
virtual void foo() { ... }
virtual void bar() { ... }
}
class Operation2 : public ProcessMgr {
virtual void foo() { ... }
virtual void bar() { ... }
}
DIP 是一系列非常好的原理中的一个原理,称为SOLID。要设计大型项目,需要做和学习的还有很多。但是 SOLID-principles 是了解如何设计软件应用程序的良好开端。
我对用 C++ 设计大型程序还很陌生。我正在编写一系列操作,每个操作都有自己的 class,它们将由 ProcessMgr
class 调用。
我正在使用 ProcessMgr
作为接口 class,可以从中调用每个操作:
class ProcessMgr
{
private:
class OperationOne;
class OperationTwo;
class OperationThree;
}
class ProcessMgr::OperationOne
{
public:
...
};
class ProcessMgr::OperationTwo
{
public:
...
};
class ProcessMgr::OperationThree
{
public:
...
};
这使我能够控制对 Operation
classes 的访问类型,因此不会暴露它们的大部分底层代码。
重要的是,此代码的用户只能以特定方式与 Operation
classes 交互,而不能完全访问 [=] 的所有内容15=] classes.
我的问题:
1) 这是设计大型程序的好方法吗?大多数库,例如 CURL,都是以这种方式构建的吗?
2) 是否有better/more 分离接口和实现的有效方法?
C++(或其他 OOP 语言)中的普通接口提供了定义。 "operation-classes" 必须从接口派生,以便将实现与客户端分离。这个原则叫做Dependency inversion principle(DIP).
DIP 中常见的 UML-diagram 如下所示:
由于Client只是熟悉Interface,所以可以控制对具体子类的访问。 实现可能如下所示:
class ProcessMgr {
virtual void foo() = 0;
virutal void bar() = 0;
}
class Operation1 : public ProcessMgr {
virtual void foo() { ... }
virtual void bar() { ... }
}
class Operation2 : public ProcessMgr {
virtual void foo() { ... }
virtual void bar() { ... }
}
DIP 是一系列非常好的原理中的一个原理,称为SOLID。要设计大型项目,需要做和学习的还有很多。但是 SOLID-principles 是了解如何设计软件应用程序的良好开端。