2008-10-31 83 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。