2008-10-31 47 views
3

我正在使用一个项目的大量对应于大量的属性中有大量实体类领域的大规模杀伤性武器降价编辑器。某些类可能有多个需要减价的属性。设计模式应用转换为多个属性的多个类

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

我创建一个工具类与接受减价字符串,并返回HTML的方法。我正在使用markdownj,这工作正常。

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

public class Course{ 

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

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

的问题有,如果课程班有2次以上性学费和先决条件说,都需要转换器,那么我将不得不编写getTuitionAsHTML()和getPrerequisiteAsHTML()。

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

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

谢谢。

[编辑]:新思想(谢谢贾斯珀)。由于该项目使用struts2(我之前没有这样说过),所以我可以创建一个视图组件,表示会为我转换markdown。然后,无论我需要将值显示为HTML,我都会使用它。

回答

2

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

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

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

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

不过,我觉得有关于您目前的架构,以提供一个有意义的回答你的问题的小细节。

+0

虽然我没有看到一个共同的接口如何帮助这里。我使用struts2的,所以也许我将创建转换降价为HTML和满足“自己的看法”的要求的定制组件。 – 2008-10-31 16:35:21

+0

通用界面将更容易以相同的方式处理所有项目。假设你有一个MarkupEntities组合,你可以简单地遍历组合并以多态的方式标记它。 然而,使用一个组件,用于在视图中标记的解决办法似乎最好在这种情况下:-) – 2008-10-31 18:22:55

1

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

您可以使用反射来遍历你的属性和格式适用于他们。你可以用一个属性标记它们,或者你可以采用一个命名方案(脆弱的,但仍然是一个选项)。

1

忽视建筑的问题,我想简单的答案可能是:

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

更妙的是,使MarkDownUtil实施IStringConverter,你可以有不同的工作 几种不同StringConverters。