这是一个通用问题。
我在设计GUI应用程序方面遇到了困难,特别是在处理不同部分之间的交互时。
我不知道我该如何处理共享状态。一方面,共享状态很糟糕,事情应该尽可能明确。另一方面,没有共享状态会引入组件之间不必要的耦合。
例如:
我希望我的应用程序可以通过脚本以类似于Emacs / Vim的方式进行扩展。显然,需要修改某种共享状态,以便GUI将使用它。我的初始计划是拥有一个全局“会话”,可以从任何地方访问,但我对此并不确定。
一个棘手的用例是键绑定。我希望用户能够从脚本中指定自定义键绑定。每个键绑定映射到一个任意命令,该命令接收会话作为唯一参数。
现在,编辑器组件捕获按键。它必须访问键映射,这些映射是每个会话的,因此它需要访问会话。将编辑器与会话耦合在一起是一个好主意吗?其他组件也需要访问键绑定,因此会话现在变成了共享对象,并且可以是单例...
有没有关于设计GUI应用程序的良好阅读材料,超越MVC?
这是Python和wxPython,FWIW。
[编辑]:添加具体用例。
我在设计GUI应用程序方面遇到了困难,特别是在处理不同部分之间的交互时。
我不知道我该如何处理共享状态。一方面,共享状态很糟糕,事情应该尽可能明确。另一方面,没有共享状态会引入组件之间不必要的耦合。
例如:
我希望我的应用程序可以通过脚本以类似于Emacs / Vim的方式进行扩展。显然,需要修改某种共享状态,以便GUI将使用它。我的初始计划是拥有一个全局“会话”,可以从任何地方访问,但我对此并不确定。
一个棘手的用例是键绑定。我希望用户能够从脚本中指定自定义键绑定。每个键绑定映射到一个任意命令,该命令接收会话作为唯一参数。
现在,编辑器组件捕获按键。它必须访问键映射,这些映射是每个会话的,因此它需要访问会话。将编辑器与会话耦合在一起是一个好主意吗?其他组件也需要访问键绑定,因此会话现在变成了共享对象,并且可以是单例...
有没有关于设计GUI应用程序的良好阅读材料,超越MVC?
这是Python和wxPython,FWIW。
[编辑]:添加具体用例。