|
发表于 2020-12-18 18:30:02
|
显示全部楼层
to:barstear
========== ========= ======== ========
| CDevice1 | | CDevice2| |CDevice3| ... |CDeviceN|
========== ========= ======== ========
↑ ↑ ↑ ↑
↓ ↓ ↓ ↓
Dev1Ctrler Dev2Ctrler ... ...
↑ ↑ ↑ ↑
↓ ↓ ↓ ↓
=======================================================
| CWhat ? |
======================================================
你画的图就是我想的, 我不过是借鉴了硬件系统中的组织结构, 在一个硬件系统中, CPU(相当于你这里的CWhat), 并不会直接操作外设的工作, 而是通过与外设相连的硬件控制器来完成的, 例如CPU不会直接控制硬盘(相当你这里的一个Device)马达的旋转, 不会控制磁头的运动, 这些是用硬盘控制器(相当于图中DevXCtrler)完成的, CPU所做的只是象不同设备的控制器"暴露"出来的端口(相当于这里的接口)写入正确的控制字, 或从中读出状态字, 所以在这种程度上, "端口"的概念进一步降低了CPU和硬件控制器的偶合.
所以你说CWhat和DevXCtrler是紧偶合, 是对的, 因为这就好比CPU为了控制软盘, 要有专用软盘指令集, 为了控制硬盘又要有一套专用的硬盘指令集, 但实际上CPU并没有这些指令集, 也不可能有. 所以为了降低CWhat和DevXCtrler的偶合, 可以再模拟出端口的概念, 比如IPort.
这样确实会造成代码膨胀, 但设计模式好像就是这样的, 如果通过一定代码的膨胀可以实现各个单元模块的高内聚, 低偶合, 易于维护和扩展, 那这种膨胀还是值得的.
这只是我的拙见 |
|