我知道 SOLID 原则是为面向对象的语言编写的。
我在书中找到:Robert Martin 的“嵌入式 C 的测试驱动开发”,本书最后一章中的以下句子:
“应用开闭原则和 Liskov 替换原则使设计更加灵活。”
因为这是一本 C 的书(没有 c++ 或 c#),所以应该有一种方法来实现这些原则。
在 C 中实现这一原则是否存在任何标准方法?
最佳答案
开闭原则指出,一个系统应该被设计成对扩展开放,同时保持对修改的封闭,或者它可以在不修改的情况下使用和扩展。 Dennis 提到的 I/O 子系统是一个相当常见的示例:在可重用系统中,用户应该能够指定如何读取和写入数据,而不是假设数据只能写入文件。
实现这一点的方式取决于您的需要:您可以允许用户传入一个打开的文件描述符或句柄,这已经启用了除了文件之外的套接字或管道的使用。或者您可以允许用户传入指向应该用于读取和写入的函数的指针:这样您的系统可以在操作系统允许的情况下用于加密或压缩数据流。
Liskov 替换原则指出应该始终可以用子类型替换类型。在 C 语言中,您通常没有子类型,但您可以在模块级别应用该原则:代码应该设计成使用模块的扩展版本,如更新版本,不应该破坏它。一个模块的扩展版本可能会使用一个 struct
,它比原始版本有更多的字段,enum
中有更多的字段,以及类似的东西,所以你的代码不应该假设传入的结构有一定的大小,或者枚举值有一定的最大值。
这方面的一个例子是如何在 BSD 套接字 API 中实现套接字地址:有一个“抽象”套接字类型 struct sockaddr
可以代表任何套接字地址类型,以及一个具体的套接字类型每个实现,例如用于 Unix 域套接字的 struct sockaddr_un
和用于 IP 套接字的 struct sockaddr_in
。处理套接字地址的函数必须传递一个指向数据的指针和具体地址类型的大小。
关于c++ - C 的 SOLID 原则实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17648266/