没有数据层的桌面应用程序的MVC

yoo*_*iba 5 architecture model-view-controller genetic-algorithm

问题可能很棘手(因为它的性质或我描述它的方式),所以在回答之前真的要读这个.

我有这个应用程序写:
a)桌面应用程序;
b)没有数据库,文件或任何其他存储库意义上的数据层(无需保存,存储或加载数据);
c)app将实现一些计算算法(遗传算法);
b)提供GUI,显示对app和计算结果的控制.

我正在考虑使用MVC模式,但我怀疑如何使用它.由于我没有(例如)数据库意义上的数据层(基于用户输入在执行期间生成数据),我担心在此实现中使用MVC的方式.到目前为止,我提出了两种方法:

  1. GUI是View.GeneticAlgorithm是Controller.GeneticAlgorithmResults是Model(作为只存储数据的类).基本流程:

    • View将用户输入发送给Controller;
    • Controller正在处理用户输入并生成数据;
    • Controller将生成的数据发送给Model;
    • 模型通知视图有关新数据;
    • View会提取新数据并更新显示.
  2. GUI是View.AppEngine是控制器.GeneticAlgorithm和GeneticAlgorithmResults是模型.现在我们有:

    • View将用户输入发送给Controller;
    • Controller正在处理用户输入并将控制信号发送到Model.
    • 模型更新其内部状态(生成新数据);
    • 模型通知控制器新数据;
    • Controller将数据拉入模型;
    • Controller处理数据;
    • 控制器将处理后的数据推送到View;
    • 视图更新显示.

第一种方法似乎更直接,更像MVC.问题是某些逻辑必须在模型中 - 决定何时通知模型,因为不会显示所有数据更新,或者显示将使用数据集更新,而不是每次更改.这些决定将基于用户输入.在实际显示之前,可能需要对数据进行一些额外的处理.这将在视图中.

另一方面,第二种方法似乎更复杂,看起来传递了很多消息来完成任务.但它完全控制了Controller的逻辑控制,并分离了View,Controller和Model(这是MVC的主要目的)的职责.

你会推荐哪种方法?或者也许我应该混合它们并使用第一种方法架构与第二种方法的通信流程?还是一些不同的设计?

Sco*_* M. 2

从我对MVC的理解来看,第二个版本更像是严格的MVC范式。然而,我的一位非常聪明的老师曾经告诉我,设计模式是为了提供一套松散的指导方针,并不一定要遵循 T。

在我看来,两者的结合是一个好主意。如果某些逻辑最终出现在模型中,这并不是世界末日,它只是意味着您必须更加小心地跟踪组件的分离。如果对 MVC 的一个小修改可以让您的生活轻松 50%(消息开销更少),那么这可能是一个好主意。