设计模式和配置设置
我开发使用XSLT转换XML文档的应用程序。设计模式和配置设置
应用程序具有类似
* input
* output (directory)
* stylesheet
* and so on...
用户设置值的设置对话框也可以选择变换到PDF,XHTML等,并设置上述用于每种格式略有不同。现在,我想知道是否有人从设计角度对如何处理这些设置有什么好的想法。我为应用程序整体使用MVP(模型 - 视图 - 演示者)模式,并且为这些设置创建了模型类。因为他们将设置存储在不同的地方和不同的方式(在构建文件进行转换)我已经为每种格式类型(PdfModel等)分类了模型类。但除了有不同的存储方式(这激发了子类化)之外,它们在某种程度上也有不同的属性,正如我所提到的。例如,xhtml格式需要css属性,而pdf格式需要fo格式化程序属性,依此类推。
我试图来解决这一问题,我得到它在几种不同的方式工作得很好,所以这是没有问题的。我只是想知道,如果任何具有良好设计模式经验的人都可以阐明一下,如果这真的是一个很好的方式来做到这一点。它感觉对我来说很多,它对于一个相对简单的事情来说太复杂了。然而,很难得到一个真正优雅的解决方案。举例来说,如果我这样做,如上文所述,我可以用一个接口,代码和这样我可以有几个不同的视图(带主持人)显示的设置,不必知道什么型号将呈现(例如,我有一个属性网格显示除了用户设置设置的视图之外的视图中的当前设置)。但是,这个问题是,我必须有一个接口,其中包含几个不用于每个格式模型的属性。所以对于pdf模型,我将不得不将Css属性设置为不适用或类似的东西。如果我要添加更多特定的属性,这可能会变得更糟。
我也试过另一种变体,我只有在接口的通用属性,然后我的代码的接口,但在向下转换接收类对象,以获取子类的属性。我不确定这是否好,但它的工作原理。也许这很好,但我真的很喜欢一些输入来找出我是否过于复杂的事情,或者我可以做得更优雅...
我希望可以从我的描述中了解问题。任何建议将不胜感激!
问候,
安德斯
也许你应该考虑在设计中更多关于什么是共同的行为,叫不上名字的属性或方法。 如果你可以有一个提供所有属性和相关的约束和验证的方法,那将是很好的。该方法将通过接口共享。另一种可能性可能是例如一些可以自动确定属性的反射功能。
我不确定我明白你的意思。在Head First OOA&D书中,他们有一个仪器属性的例子,他们在仪器类中嵌入了“spec”类。 spec类有一种Dictionary,它保存可以在不同乐器之间变化的属性。不是一种方法,但它是这样的吗?我只是有点不喜欢,因为不是能够指固定资产在另一个类我必须写字符串键:Instrument.Properties(“numOfStrings”,6)。你能提供简单的例子吗? – Anders 2010-01-22 10:50:49
我正是那样。我知道你不喜欢你必须使用这些属性的方式,为了克服这一点,需要一个动态的OOP语言,无论如何它都会这样做,但是当语法糖和MethodMissing是普通行为时,当没有指定的属性时。 – 2010-01-25 08:08:14
好的,不是我希望的答案,但也许没有更好的办法,就像你说的那样。要么是字典,要么接受具有通用接口的未使用属性......感谢您的输入! – Anders 2010-01-25 08:21:06
,如果你发布你当前什么样的属性界面将是,如果你正在寻找一些最佳实践帮助的想法可能会有所帮助。那些试图回答的人可能有一些代码需要处理。 – justkt 2010-01-27 13:24:04