我正在开发一种HMI应用程序,并且正在创建定义特定机器的对象.让我们说这是一辆汽车,为了争论.
引擎的一个对象是显而易见的.引擎上有一些常见的传感器,这是一些安装在引擎对象上的几个属性的对象.油门属性当然是一个输入.
这辆车至少有一扇门.每扇门都可以有一个窗户,它可以打开,也可以电动操作.如果它是电动的,它将取决于汽车的动力来运行.
现在,我应该将门作为汽车对象的属性暴露出来,还是将它保密并让汽车对象在OpenDoor和RollDownWindow函数中操作门是最明智的?活动怎么样?我应该在引擎上公开事件,例如LowOnOil事件,还是我应该在汽车对象中处理它反过来又可能有像EngineIsLowOnOil这样的事件?
你会怎么做?
小智 8
通过考虑建立模型的原因,可以回答这个以及所有类似的问题.创建一个独立于您尝试解决的问题的模型是绝对没有意义的,并且通常不可能这样做.
例如,如果您正在构建电子燃油喷射控制系统,那么车辆上的车门数量(甚至车辆本身的车门数量)都没有意义,也不应该建模.
让我们探讨一下打开汽车门的例子(比如左前方).人们可以采取几种方法(包括你建议的方法):
它们都不对或错,这取决于具体情况.我相信还有很多方法.
1号是一种硬编码功能方法.这对于非常简单的固定情况很有用.但如果您的模型需要适应变化,那将变得难以管理.
5号采用参数化方法.后者更灵活,需要更大的设计才能完成,但对于一个简单的问题可能会有点过分.
另外请记住,您的汽车对象可以提供与内部实现不同的外部界面.例如,你可以在内部使用方法5但是提供一个接口,例如1,并在引擎盖下翻译函数调用(没有双关语意).
最终,做出这样决定的能力来自经验.让自己暴露在良好的OO设计,阅读书籍,检查好软件的源代码.最重要的是,尝试不同的设计,看看自己有什么作用和原因.