我的骰子模拟器在几个方面让我烦恼,都与面向对象的设计有关:
- 用户对骰子测试的选择会影响应在用户界面中显示的内容以及应构成表示测试数据的对象的一部分的内容
- 用户对测试参数的选择会影响用户界面中应显示的内容以及应构成表示测试数据的对象的一部分
换句话说,我的 GUI 是可变的,而我的数据模型是可变的——它们都依赖于从用户输入中接收到的许多潜在条件。我一直用来处理变化的传统方法是开关和 if 语句,但这些方法令人困惑、庞大且嵌套。
是否存在允许 GUI 和模型变化的面向对象的设计范例?
与大多数问题一样,解决方案是添加更多抽象层:)
看看 MVC、MVP 和 MVVM*。这些模式旨在分离 UI 和数据之间的职责。因为您想在运行时在模型(数据)和 UI(视图)之间切换,您可能需要创建一个额外的抽象,即契约,以允许任何视图绑定到任何(或特定子集)数据。
*此链接绝对不是唯一的来源,但搜索网络(当然还有 Stack Overflow)将帮助您掌握这些模式。
最受欢迎的三个:
MVC 如果是 Web MVP 如果是桌面 MVVM
我早些时候发布了这个并提供了图表:http ://carnotaurus.tumblr.com/post/2748019388/visual-pattern-links
我还建议将 DAL 也分成两部分,以帮助进行测试