虽然 SOLID 设计原则主要应用于面向对象的系统,但也有一些 SOLID 概念可以应用于过程式编程,例如 SRP 或 DIP。但是当我研究 POSIX API 中可用的一些函数时,我注意到有些原则没有得到尊重,即使它可能是这样。
我将以SRP和系统调用sigaction为例:
- SRP指出,在我们的例子中,一个函数必须有一个单一的职责,这意味着我们系统规范的单个部分的变化是可能改变函数规范的一件事。
- sigaction是一个系统调用,用于更改进程在接收到信号时所采取的操作。
sigaction可用于安装以下形式的基本处理程序:
void (*sa_handler)(int)
这意味着处理程序仅接收信号的编号以执行其操作。系统调用也可用于安装以下形式的处理程序:
void (*sa_sigaction)(int, siginfo_t*, void*)
这让我们获得了有关处理信号的更多信息。由于调用者放置了标志,两种形式都安装了相同的系统调用。
在我看来,sigaction违反了SRP原则,因为它有责任实现这两种类型的处理程序安装。
所以我的问题是:POSIX API 是否违反了 SOLID 原则,如果是,为什么?