我有一个非常以数据为中心的应用程序,用 Python / PyQt 编写。我计划进行一些重构以真正将 UI 与核心分开,主要是因为还没有任何真正的测试到位,而且显然必须改变。
已经有一些分离,我认为我已经以正确的方式做了很多事情,但它远非完美。两个例子,告诉你什么样的事情困扰着我:
当用户右键单击一个数据对象的表示时,弹出的上下文菜单是由该数据对象创建的,尽管这个数据对象(本质上是一个数据库行的 ORM 表示)显然应该与 UI 无关.
当一些东西被写入数据库,但写入失败(例如,因为数据库记录被不同的用户锁定),经典的“重试/中止”消息框会呈现给用户。这个对话框是由数据提供者*创建的,尽管提供者显然不应该有任何 UI 功能。显然,提供者可以改为引发异常或以其他方式指示失败,并且 UI 可以捕获并采取相应的行动。
* 这是我用来表示基本上代表数据库表并在其数据对象和数据库引擎之间进行调解的对象的词;我不确定这是否是通常所说的“提供者”
我没有测试经验,所以我不容易“感觉到”可测试性问题或类似问题,但在我开始之前,必须进行一些重组。
不涉及复杂的业务逻辑(它主要只是 CRU D,是的,即使没有 D ),这将比重写更重组,所以我并不真正关心引入回归错误,就像在这个问题中讨论的那样。
我的计划是在开始重构时考虑到 UI 部分可以很容易地被替换为 Web 前端或基于文本的界面而不是 Qt 界面的想法。另一方面,核心仍然会使用 Qt 本身,因为在很多地方都使用了信号/槽机制,例如数据对象发出changed
信号来指示,嗯,你知道什么。
所以,我的问题是:这是提高可测试性和可维护性的可行方法吗?任何其他评论,特别是考虑到 Python ?