0

我很难弄清楚这种应用程序的正确架构:它是一种类似MS Visio的图表应用程序。这些图用于生成传递给另一个应用程序的数据。以用户界面为中心的应用程序的分离演示

在设计应用程序时,我一直试图使用分层,但现在当数据与演示紧密结合时,我无法决定如何做到这一点。例如,画布中的某个对象具有(X,Y)数据,仅用于演示目的,但必须像域数据一样存储。

我哪里错了?我很确定我从错误的角度看待这个问题,但我找不出合适的解决方案。

再次感谢!

UPDATE:

我也知道,也许我不应该在这种情况下被分离域UI。如果是这样,请给我一些关于什么时候应用分离和什么时候不分离的理由。

回答

2

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

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

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

如果没有业务逻辑,通过使用单独的一组对象来进行域和表示,您将不得不复制所有模型数据两次(一次在模型对象中,一次在演示文稿对象中)从业务逻辑与演示分离中获得任何优势(因为没有)。另一方面,如果你确实有一些算法运行在数据上,你可以通过从图形代码中分离图形数据来获得某些东西 - 你可以在算法之外运行算法,你可以有更好的自动化测试等

也如果编写上至少可以共享模型定义和保存/加载代码,如果你从图代码中分离它相同的数据进行操作的另一系统。

所以,让我们总结一下:

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

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

  • 如果这两个覆盖了您的代码和数据,而不是您的应用程序,那么您的应用程序就没有任何“业务逻辑”,并且层间隔可能过大。

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

  • 如果系统之间有代码共享的机会,你应该确保共享代码没有与表示代码混合在一起。

  • 还有最后一个“奖励”要点 - 如果这是一个长期积极开发并且未来增加新功能的项目 - 您可能需要分离UI /数据,以便制作未来的工作更容易 - 你必须决定这个未来的储蓄是否值得现在的额外时间,以及这种分离是否真的有可能在未来有所帮助。

+0

我害怕赏金会在没有任何我想要的答案的情况下结束。另一个答案很好,我把它提高了,但它并没有解开我心中的结。您的意见是:绘制形状的代码是演示文稿,形状本身就是域。 此外,随着详细程度的提出,答案是非常值得的赏金。非常感谢您的帮助。 – 2010-07-12 18:28:03

0

你可以试着实现某种视图模型,它保存了你的对象的当前布局。这样,x/y值与对象的id一起存储在布局文件中,而纯模型数据存储在别处。

也许这有点帮助,

1

我认为你需要确保你保持什么以及如何独立。你所展示的是抽象的,坐标集合,形状类型。你如何显示它非常具体。我会确保域模型纯粹处理什么和视图层是如何处理的。尽管不了解您的应用程序,但很难进入具体细节。

相关问题