- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
虽然 SOLID 设计原则主要应用于面向对象的系统,但也有一些 SOLID 概念可以应用于过程编程,例如 SRP 或 DIP。但是当我研究 POSIX API 中可用的一些函数时,我注意到有些原则没有得到遵守,即使它可能是这样。
我以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
无法成为 fork
和 execve
的 AS 安全替代品,因为它依赖于属性对象的创建。 POSIX 线程接口(interface)也大量借鉴了 OOP,其方式通常不会破坏任何东西,但使用起来却无缘无故地痛苦。
关于c - POSIX API 和 SOLID 设计原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48341881/
我想知道大括号在那种情况下是什么意思? uint64 configCount = s_configCount; { s_hotVars.latestConfigDigest = c
我正在运行一个独立的单用户 v5 节点实体服务器。当我以该单个用户身份登录时,我能够在一个不存在的容器中创建一个文档,并且服务器会为我创建该容器。 例如 POST https://my.server:
我想覆盖以下继承函数: function _setBaseURI(string memory baseURI) public override(ERC721Full, ERC721Metadata
我定义了一个映射类型的状态变量,例如映射(uint256 => uint256[])。我想将其公开,以便我可以从契约(Contract)外部访问它。但是,编译器报告错误 TypeError: Wron
我正在处理 Solidity 智能合约,并且正在导入 openzeppelin-solidity 库和 chainlink 库。 两者都有 SafeMath 库;我正在用 Python 加载所有 .s
我在以下示例中遇到了 Solidity Documentation 并且在我的项目中有类似的代码并想设置 default value如果键不是从调用者传递过来的,则到 key 参数 pragma so
据我所知,有两种方法可以获得某个地址的余额。 address firstAddress; "firstAddress.balance"这将获得地址“firstAddress”的余额。 address
我正在使用 solidity 构建一个 NFT 智能合约,并且我试图在部署合约时将 Array of Structs 传递到构造函数中。但是我收到以下错误。 TypeError: Cannot rea
免费的 Everscale Solidity。如何与负责 职能部门合作?如何正确等待回调并从sdk查看合约执行结果? 例如,我有契约(Contract)(没有任何用处)。如何在我的应用程序中以正确的方
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 3 年前。 Improve
我最近在很多代码中注意到人们将硬编码的配置(如端口号等)值放在类/方法的深处,使其难以找到,也无法配置。 这是否违反了 SOLID 原则?如果不是,我是否可以向我的团队成员引用另一个“原则”来说明为什
Solidity 最近的变化将回退函数格式从只是 function() 更改为 fallback(),这对于初学者来说非常好理解发生了什么,但是我有一个问题,关于编译器在我实现时给我的建议后备。 例如
如果我有类似的东西 class square : figure {} class triangle : figure {} 这是否意味着我永远不应该使用正方形和三角形类而只能引用图形? 永远不要这样做
我正在尝试将字节可靠地转换为 uint256。这是坚固的代码, // SPDX-License-Identifier: MIT pragma solidity 0.8.13; contract Sam
我想在 SolidJS 中动态设置 JSX 标签名称。我来自 React it is fairly simple to do : /* Working ReactJS Code: */ export
我正在尝试将字节可靠地转换为 uint256。这是坚固的代码, // SPDX-License-Identifier: MIT pragma solidity 0.8.13; contract Sam
我想在 SolidJS 中动态设置 JSX 标签名称。我来自 React it is fairly simple to do : /* Working ReactJS Code: */ export
我正在继续开发 ASP.NET 应用程序(基于 Web 表单),其中以前的开发人员没有遵循良好的面向对象设计原则,即 SOLID (http://www.remondo.net/solid-princ
我创建了 ERC20 代币,我想将我的代币转移到另一个地址。 我的元掩码中有两个帐户。(帐户 A/B) 我的 ERC20 代码在这里(我在账户 A 中部署并保存了代币) pragma solidity
struct Test { uint ui; string s; } function test(Test t) public { emit Log(t.ui, t.s); } 我对 AB
我是一名优秀的程序员,十分优秀!