我正在构建自己的Canvas风格的JPanel子类,它将绘制节点和弧的图形。 作为这个应用程序的一部分,我将节点的绘图委托给精灵类Node,即
Class Visualiser extends JPanel {
...
paintComponent(Graphics g) {
...
node.draw(g);
...
}
}
但我也有一个用于数据结构的类Node。我不关心命名法,我可以调用一个NodeSprite来避免冲突等等......
我想知道的是是否将数据结构和sprite类合并为一个,因为逻辑上它们都描述了相同的真实世界,或者如果这样做会产生任何负面影响,如性能,或者一般不好设计。
有什么建议吗?
答案 0 :(得分:3)
如果NodeSprite
的行为不是知道如何自行打印,则会违反single responsibility principle。如果所有它知道怎么做是绘制,我会保持这种方式,并考虑重命名它NodeSpritePrinter
或类似的东西。
答案 1 :(得分:1)
如果NodeSpite只是绘制一个节点。然后我很想把它们结合起来。有时将视图与模型分开会有很好的设计意义,但肯定有这样做会造成不必要的复杂性。
此外,Node听起来像一个非常通用的名称。无论如何,给它一个更具体的名称可能是件好事。
答案 2 :(得分:0)
缺点是将绘制代码与Node的域逻辑混合在一起。这不会是一场灾难,但它会使代码不那么清晰。具有用于对域对象及其表示进行建模的并行类集的模式是一个古老而光荣的模式,并且实际上在AWT本身中使用 - 对于每个组件,都有相应的“本地对等体”。我采取两班制的方法;它更好地分离责任,并没有真正的缺点。