我很难为这种应用程序找出正确的架构:它是一个图表应用程序,类似于MS。这些图表用于生成传递给另一个应用程序的数据。
在设计应用程序时,我一直试图使用分层,但现在我无法决定如何做到这一点,因为数据与表示耦合得如此紧密。例如,我的画布中的某个对象有一个(X,Y)数据,该数据仅用于表示目的,但必须像域数据一样存储。
我在哪里搞错了?我很确定我从错误的角度看这个,但我找不到正确的那个。
再次感谢!
更新:
我还意识到,在这种情况下,也许我不应该将UI与域分离。如果是这样的话,请为我提供一些合理的何时应用分离和何时不适用。
发布于 2010-07-11 14:56:53
在图表工具中,形状的x/y位置是域数据的一部分(形状的位置是图表的一部分--没有它就不能绘制图表),使用这些x/y坐标并在屏幕上绘制形状的代码是表示层的一部分。
我知道有些人认为只用于显示的数据应该单独保存,但在我曾经单独处理过的每个项目中,这都是一个巨大的维护和支持噩梦。
在一个简单的图表工具中(如果工具只是绘制和编辑图表,而没有基于图表的任何花哨处理),就没有业务逻辑,只有绘制和编辑图表(属于表示层)和图表数据(即域模型)的代码。
如果没有业务逻辑,通过为域和表示使用一组单独的对象,您将不得不两次复制所有模型数据(一次在模型对象中,一次在表示对象中),并且将业务逻辑与演示文稿分离没有任何好处(因为没有)。
另一方面,如果您有一些算法运行在数据上,您可以通过将图形数据与绘图代码分离来获得一些好处--您可以在工具之外运行该算法,您可以进行更好的自动化测试,等等。
另外,如果您编写了另一个对相同数据进行操作的系统,那么如果您将模型定义与绘图代码分离,您至少可以共享模型定义和保存/加载代码。
那么,让我们总结一下:
所有关系图数据都是模型的一部分(包括仅用于绘制屏幕或处理用户输入的表示purposes).
< code >H 19If系统之间有任何代码共享的机会,您应该确保共享代码不与表示代码混为一谈。
发布于 2010-07-06 21:57:22
我认为你需要确保你保持的内容和方式是分开的。您正在显示的是抽象的、一组坐标、形状类型。你如何显示它是非常具体的。我要确保域模型纯粹处理什么,视图层唯一地处理如何处理。但是,如果不了解更多关于应用程序的信息,就很难深入了解细节。
发布于 2010-06-28 11:23:08
您可以尝试实现某种视图模型,它保存了对象的当前布局。这样,x/y值和对象的id一起存储在布局文件中,而纯模型数据则存储在其他地方。
也许这有点帮助,
https://stackoverflow.com/questions/3131810
复制相似问题