3

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

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

我创建了一个实用程序类,其方法接受降价字符串并返回 HTML。我正在使用 markdownj,这很好用。

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

public class Course{

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

     public String getDescriptionAsHTML(){
          return MarkdownUtil.convert(getDescription());
     }
     .
     .
     .
 }

问题在于,如果 Course 类还有 2 个属性 Tuition 和 Prerequisites 说,它们都需要转换器,那么我将不得不编写 getTuitionAsHTML() 和 getPrerequisiteAsHTML()。

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

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

谢谢。

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

4

3 回答 3

2

需要这个的类不是单个继承层次结构的一部分。

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

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

这显然是 View 的责任。#1 MVC 规则是模型不关心它的表示,在这种情况下是降价。

但是,我觉得关于您当前架构的细节很少,无法为您的问题提供有意义的答案。

于 2008-10-31T16:29:55.530 回答
1

如果您不能使用继承或接口,您确实有一个选择。我知道,我知道重构,但这是现实并且 *hit 发生了。

您可以使用反射来迭代您的属性并将格式应用于它们。您可以使用属性标记它们,也可以采用命名方案(脆弱,但仍然是一个选项)。

于 2008-10-31T16:38:23.690 回答
1

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

public String getDescription(MarkDownUtil converter)
{
    if (converter == null) return description;
    else return MarkdownUtil.convert(description);
}

更好的是让 MarkDownUtil 实现 IStringConverter,并且您可以为不同的工作使用多个不同的 StringConverter。

于 2008-10-31T16:39:36.837 回答