5
如何在C中应用接口隔离原则?
我有一个模块,例如“ M”,其中有一些客户端,例如“ C1”,“ C2”,“ C3”。我想将模块M的名称空间(即,其公开的API和数据的声明)分配给头文件,使得- 对于任何客户端,仅可见其所需的数据和API;模块的其余名称空间对客户端是隐藏的,即遵守接口隔离原则。 在多个头文件中不重复声明,即不违反DRY。 模块M与其客户端没有任何依赖关系。 客户端不受模块M未被其使用的部分中所做的更改的影响。 现有客户端不受添加或删除更多客户端的影响。 目前,我通过根据模块客户端的需求划分模块的命名空间来解决此问题。例如,在下面的图像中,显示了其3个客户端所需的模块名称空间的不同部分。客户要求有重叠。模块的名称空间分为4个单独的头文件-'a','1','2'和'3'。 但是,这违反了上述某些要求,即R3和R5。违反了要求3,因为这种划分取决于客户端的性质;在添加新客户端时,该分区也会更改并违反要求5。如上图右侧所示,在添加新客户端后,模块的命名空间现在分为7个头文件-'a ”,“ b”,“ c”,“ 1”,“ 2 *”,“ 3 *”和“ 4”。用于2个旧客户端的头文件发生更改,从而触发了其重建。 有没有办法以非人为方式在C中实现接口隔离? 如果是,您将如何处理上述示例? 我想象的是一个虚幻的假设解决方案- 该模块有1个胖头文件覆盖了整个名称空间。该头文件分为可寻址的部分和子部分,如Wikipedia页面。然后,每个客户端都有一个为其量身定制的特定头文件。特定于客户机的头文件只是指向胖头文件的节/子节的超链接的列表。如果构建模块指向模块头文件中的任何部分,则构建系统必须将特定于客户端的头文件识别为“已修改”。
15
c
interfaces
solid