【问题标题】:Design strategy advice for defining machine system functionality定义机器系统功能的设计策略建议
【发布时间】:2010-01-16 03:37:33
【问题描述】:

这个问题与项目设计有关。该项目采用电气系统并以编程方式定义其功能。现在我已经深入定义了系统,我正在合并大量的交互,这些交互会导致系统进行适当的自我配置。示例:系统在某些事件发生时打开和关闭电气接触器。因为这个系统在飞机上,它依赖于空中/地面逻辑,因此根据它的位置结合了两种不同的行为。

我给出所有这些解释是为了展示这个应用程序包含的复杂程度。在我继续设计的过程中,我使用了 if/else 结构作为推断该电气系统中正确配置的一种方法。但是,我对编码的了解越深,需要的 if/else 结构就越多。我觉得我已经到了对这个系统进行低效编程的地步。

对于那些以前处理过此类项目的人,我问:我是否正在走一条众所周知的道路(在定义可能发生的每一种可能的情况时),我应该继续坚持下去......或者我可以聘请一些完成定义现实世界系统行为任务的其他策略。

在这一点上,我几乎没有使用委托的经验,但我想知道是否可以利用一些观察者或其他“可可”的优点来检查场景,而不是无穷无尽的 if/else 块。

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch project-planning


    【解决方案1】:

    由于您正在尝试对现实世界的系统进行建模,我建议创建一个具体的面向对象设计,该设计很好地定义了 is-a 和 has-a 关系,并应用良好的老式面向对象设计并将其应用于打破将现实世界系统分解成功能分解。

    我建议您研究定义处理一般情况的协议,并在特定情况下使用它们。

    例如,您可以有多种类型的事件遵循 ElectricalEvent 协议,并且根据类型,您可以更好地决定 ElectricalContactor 如何使用 isKindOfClass 选择器区分 GeneralElectricEvent 和 SpecializedElectricEvent。

    【讨论】:

      【解决方案2】:

      如果您可以提前定义所有状态,则最好将其实现为finite state machine。这使您可以在一个中心位置清楚地定义与状态相关的逻辑。

      您可以研究一些实现:

      • SCM 允许您为 Objective-C 生成状态机代码
      • OFC 将它们实现为DFSM

      当然,如果更适合您,您也可以推出自己的自定义实现。

      【讨论】: