选择哪种模式?

时间:2013-09-18 13:57:35

标签: architecture

我正在开发一个处理发票的桌面GUI(Qt + Python)应用程序。到目前为止,我有两种物体:

  • 描述发票,产品,客户,即模型的ORM类。

  • 允许浏览\编辑模型的视图。

每个模型都可以有多个视图。

我得到了这些代码:

  1. 初始化模型的代码(“创建新发票时, 发票日期应该是今天“)
  2. 对视图中的用户更改做出反应的代码(“当客户是 选中,设置适当的价格水平并重新计算所有价格和 量”)
  3. 即时执行明确验证的代码(“发票日期不能 空!必须选择产品!“)
  4. 根据业务规则验证发票的代码(“产品 没有库存“,”销售金额超过客户的信用额度“)。
  5. 所以问题是 - 我应该选择哪种设计模式?目标是避免代码重复,并允许快速更改模型和视图。 到目前为止,我一直在考虑简单的模型 - 视图方法,1& 4属于模型本身。但2& 3给了我一个暂停。我应该使用MVC并将2& 3放入控制器吗?有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我认为查看Command Query Responsibility Segregation(CQRS)模式对您来说很有价值:http://martinfowler.com/bliki/CQRS.html

您拥有作为视图的模型,以及作为实体的模型。您的视图模型逻辑不应该传送到Controller中,控制器应该将事件分派给它。

因此,在您的示例#2中,您说:当选择客户时,设置适当的价格水平并重新计算......被“选中”的客户是某个域对象的一部分,无论是“订单”还是“交易”或其他一些。这个域对象可能不是Order实体,而是OrderProcess域视图,它有一堆与之关联的“视图”(如价格列表)。