Java 将转换应用于多个类中的多个属性的设计模式

Java 将转换应用于多个类中的多个属性的设计模式,java,design-patterns,markdown,Java,Design Patterns,Markdown,我在一个项目中使用WMD标记编辑器处理大量字段,这些字段对应于大量实体类中的大量属性。某些类可能有多个属性需要降价 我存储的降价本身,因为这使它更容易编辑字段以后。但是,我需要将属性转换为HTML,以便稍后显示。问题是:是否有一些模式可以用来避免在所有实体类中编写标记转换代码 我用一个方法创建了一个实用程序类,该方法接受标记字符串并返回HTML。我用的是markdownj,效果很好 问题是,对于存储标记的每个类的每个属性,我可能需要另一个转换为HTML的方法: public class Cour

我在一个项目中使用WMD标记编辑器处理大量字段,这些字段对应于大量实体类中的大量属性。某些类可能有多个属性需要降价

我存储的降价本身,因为这使它更容易编辑字段以后。但是,我需要将属性转换为HTML,以便稍后显示。问题是:是否有一些模式可以用来避免在所有实体类中编写标记转换代码

我用一个方法创建了一个实用程序类,该方法接受标记字符串并返回HTML。我用的是markdownj,效果很好

问题是,对于存储标记的每个类的每个属性,我可能需要另一个转换为HTML的方法:

public class Course{

     private String description;
     .
     .
     .
     public String getDescription(){
          return description;
     }

     public String getDescriptionAsHTML(){
          return MarkdownUtil.convert(getDescription());
     }
     .
     .
     .
 }
问题是,如果课程类还有两个属性,比如说学费和先决条件,它们都需要转换器,那么我必须编写getuitionashtml()和getPrerequisiteAsHTML()

我觉得这有点难看,想要一个更干净的解决方案。需要此功能的类不是单个继承层次结构的一部分

我正在考虑的另一个选择是在控制器中而不是在模型中执行此操作。你对此有何看法

谢谢

[编辑]:新想法(谢谢Jasper)。由于该项目使用struts2(我以前没有说过),我可以创建一个视图组件,可以为我转换标记。然后我在需要将值显示为HTML的任何地方使用它

需要此功能的类不是单个继承层次结构的一部分

他们至少应该实现一个公共接口,否则提出一个干净的通用解决方案会很麻烦

我正在考虑的另一个选择是在控制器中而不是在模型中执行此操作。你对此有何看法

这显然是观点的责任。MVC的#1规则是模型不关心它的表示,在本例中是降价


但是,我觉得关于您当前的体系结构,没有什么细节可以给您的问题提供有意义的答案。

如果您不能使用继承或接口,您确实可以选择这样做。我知道,我知道重构,但这是现实,而且会发生


您可以使用反射来迭代属性并对其应用格式。您可以使用属性标记它们,也可以采用命名方案(虽然很脆弱,但仍然是一种选择)。

忽略架构问题,我认为简单的答案可能是:

public String getDescription(MarkDownUtil converter)
{
    if (converter == null) return description;
    else return MarkdownUtil.convert(description);
}
更好的办法是让MarkDownUtil实现IStringConverter,您可以
几个不同的StringConverter用于不同的工作。

但我不知道通用接口在这里有什么帮助。我正在使用struts2,所以我可能会创建一个自定义组件,将标记转换为html,并满足“在视图中执行”的要求。公共界面将使以相同的方式处理所有项目变得更容易。假设您有一个MarkupEntities的组合,您可以简单地遍历该组合并以多态方式对其进行标记。但是,在视图中使用组件进行标记的解决方案在这种情况下似乎是最好的:-)我考虑过反射,但拒绝了它,因为正如您所指出的,它太脆弱了。对于属性,我不会说它脆弱,但绝对不理想。