gpt4 book ai didi

c - POSIX API 和 SOLID 设计原则

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:34 24 4
gpt4 key购买 nike

虽然 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 原则,如果是,为什么?

最佳答案

除了这些原则是意见问题之外,POSIX 比 SOLID 早了几十年。它还主要记录现有实践并将其形式化,而不是从头开始重新发明事物。由委员会设计往往是一个比违反像 SRP 这样的学究气更严重的问题,所以这几乎肯定是一件好事。

请注意,实际上由 POSIX 设计的一些接口(interface)确实严格遵循 OOP 设计原则,通常采用引入缺陷的方式。例如,posix_spawn 无法成为 forkexecve 的 AS 安全替代品,因为它依赖于属性对象的创建。 POSIX 线程接口(interface)也大量借鉴了 OOP,其方式通常不会破坏任何东西,但使用起来却无缘无故地痛苦。

关于c - POSIX API 和 SOLID 设计原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48341881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com