首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >硬件UI的设计

硬件UI的设计
EN

Software Engineering用户
提问于 2022-06-21 08:25:46
回答 1查看 121关注 0票数 0

在每个按钮的功能取决于状态的情况下,处理来自硬件按钮的用户输入的合适软件设计方法是什么?

我正在设计一种乐器,它有很多硬件按钮(比如新洗垫Monome网格)。我习惯于构建基于屏幕的软件,您可以根据上下文显示和隐藏按钮,每个按钮通常只有一个功能。但是硬件按钮是一个非常不同的挑战,我的代码正在迅速变成无法管理的混乱的if语句。

例如,单个按钮可能具有以下功能:

  • 如果正在播放传输,按下它就会启动剪辑。
  • 除非在按Select键时按住它,否则它会选择剪辑。
  • 如果传输没有播放,则按下它将选择剪辑,即使Select未被保存。
  • 如果按下按钮时保持Delete,它将删除剪辑。
  • 如果按钮被长时间按下,那么它就复制剪辑。
  • 但是,如果在与该按钮对应的插槽中不存在剪辑,则将在该插槽中创建一个剪辑,而不是上述所有剪辑。

..。所有这些都只是应用程序的一个视图,其他视图可能完全不同。

这显然是某种状态机,但是状态的数量是巨大的--如果你考虑到你可以在其中编程任何歌曲的话,实际上是无限的--所以我不确定这是否是一个有用的抽象。我看过Monome网格教程,但它们的示例并不比我的代码好。

EN

回答 1

Software Engineering用户

发布于 2022-06-21 09:54:40

我设计这样一个系统的方法是将按钮处理逻辑与应用程序逻辑分离,从按钮按下生成(主要是)状态无关的事件,并且只处理应用程序状态机中的那些事件。

与您的示例一起使用,并假设按下的按钮为nr。42,然后

  • 按下(或实际上只在释放时)按钮将生成“播放剪辑(42)”事件。
  • 按下按钮并按下按钮将生成“选择剪辑(42)”事件按下按钮并按下按钮将生成“删除剪辑(42)”事件长时间按下按钮会产生“复制剪辑(42)”事件。处理这些事件的应用程序将知道,如果传输没有播放,那么“播放剪辑”事件的响应应该与“选择剪辑”事件具有相同的响应,如果该位置还不存在剪辑,则应该具有“创建剪辑”事件的响应。在那里,你也可以定义一个“删除剪辑”事件在一个空点应该没有任何影响。请注意,这种职责分离如何使这两个部分更易于管理。
票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/439375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档