以UI为中心的应用程序的单独演示文稿

时间:2010-06-28 11:08:32

标签: model-view-controller architecture separation-of-concerns

我无法确定这种应用程序的正确架构:它是一个图表应用程序,类似于MS Visio。这些图用于生成传递给另一个应用程序的数据。

在设计应用程序时,我总是尝试使用分层,但现在当数据与演示文稿紧密耦合时,我无法决定如何执行此操作。例如,我画布中的某个对象有一个(X,Y)数据,仅用于演示目的,但必须像域数据一样存储。

我在哪里弄错了?我很确定我是从错误的角度看这个,但我找不到正确的。

再次感谢!

更新

我也知道也许在这种情况下,我不应该将UI与域分开。如果是这样的话,请告诉我何时应用分离以及何时不进行分离。

3 个答案:

答案 0 :(得分:2)

在图表工具中,形状的x / y位置是域数据的一部分(形状的位置是图的一部分 - 你不能在没有它的情况下绘制图表),使用那些x / y的代码坐标并在屏幕上绘制形状是表示层的一部分。

我知道有些人认为仅用于显示的数据应该单独保存,但在我曾经分别保存过的每个项目中,这都是一个巨大的维护和支持噩梦。

在一个简单的图表工具中(如果工具只绘制和编辑图表而没有基于图表的任何花哨处理)没有业务逻辑,只有绘制和编辑图表的代码(属于表示层) )和图表数据(即域模型)。

如果没有业务逻辑,通过为域和表示使用一组单独的对象,您将必须复制所有模型数据两次(一次在模型对象中,一次在表示对象中),你不会通过将业务逻辑与表示分离(因为没有任何优势)获得任何优势。

另一方面,如果你有一些运行数据的算法,你可以通过将图形数据与绘图代码分开来获得一些东西 - 你可以在工具外运行算法,你可以有更好的自动化测试等等。

如果您编写另一个对相同数据进行操作的系统,如果将其与绘图代码分开,则至少可以共享模型定义并保存/加载代码。

所以,让我们总结一下:

  • 所有图表数据都是模型的一部分(包括仅用于演示目的的数据)。

  • 绘制到屏幕或处理用户输入的任何内容都在表示层中(显然)。

  • 如果这两个代码和数据都覆盖了您的应用程序而没有任何“业务逻辑”,并且层分离可能有点过分。

  • 如果您有任何代码不符合这两个类别,并且您认为它应该是模型的一部分,那么您应该构建两个单独的层。

  • 如果系统之间有任何代码共享的机会,您应该确保共享代码不会与演示代码混合在一起。

  • 最后一个“奖励”点 - 如果这个项目可能会在未来添加新功能的情况下长时间处于活跃开发状态 - 您可能希望将UI /数据分开让未来的工作变得更轻松 - 你必须决定今后的节省是否值得花费额外的时间,以及这种分离是否真的有助于将来。

答案 1 :(得分:1)

我认为你需要确保你保持分离的内容和方式。您正在显示的是抽象,坐标集,形状类型。你如何展示它是非常具体的。我确保域模型完全处理什么和视图层处理如何唯一。如果不了解您的应用程序,很难了解细节。

答案 2 :(得分:0)

您可以尝试实现某种视图模型,这样可以保存对象的当前布局。这样,x / y值和对象的id一起存储在布局文件中,而纯模型数据存储在其他地方。

也许这有点帮助,

相关问题