2015-08-22 33 views
6

這裏是我Builder界面:生成器設計模式:訪問/模型數據傳遞到/混凝土類

public interface IContainerBuilder { 
    void SetSections(); 
    void SetSides(); 
    void SetArea(); 
    WebControl GetContainer(); 
} 

這是我ConcreteBuilder:

public class SingleContainerBuilder:BaseProperties, IContainerBuilder { 
    Panel panel = new Panel(); 
    public void SetSections() { 
    //panel.Height = value coming from model 
    //panel.Width = value coming from model 
    } 
    public void SetSides() { 
    //panel.someproperty = //value coming from model, 
    //panel.someotherproperty = //value coming from model, 
    } 
    public void SetArea() { 
    throw new NotImplementedException(); 
    } 
    public System.Web.UI.WebControls.WebControl GetContainer() { 
    return panel; 
    } 
} 

和導演是在這裏:

public class ContainerBuilder { 
    private readonly IContainerBuilder objBuilder; 
    public Builder(IContainerBuilder conBuilder) { 
    objBuilder = conBuilder; 
    } 
    public void BuildContainer() { 
    objBuilder.SetArea(); 
    objBuilder.SetSections(); 
    objBuilder.SetSides(); 
    } 
    public WebControl GetContainer() { 
    return this.objBuilder.GetContainer(); 
    } 
} 

這就是我如何從默認的頁面調用它:

var conBuilder = new ContainerBuilder(new SingleContainerBuilder()); 
conBuilder.BuildContainer(); 
var container = conBuilder.GetContainer(); 

現在我遇到的問題/困惑是如何傳遞的模型數據的具體類?我困惑/卡住的原因是可能有多個不同的容器(可能超過20-30個)。每種不同類型的容器都必須從模型中獲取數據,還是有更好的方法?

我很困惑與是第二件事,我的模型是在不同的圖書館。我是否需要在我的Web項目中創建模型的副本,並從該主模型填充本地模型,還是應該直接查詢混凝土類屬性的主模型?正如你所看到的,我的SingleContainer包含BaseProperties,它們是已經在主模型中的屬性的本地聲明。我沒有看到或理解本地模型的觀點,我不確定我是否在這裏。

對不起,我是設計模式的新手。

任何幫助將是非常讚賞,

感謝

回答

2

我創建了一個正在生成器的初始化之前調用庫,我發送的容器,我需要到圖書館靜態方法和圖書館的「關鍵」讓我回到我根據「解釋」所需要的數據然後我將這個對象傳遞給建設者,並在那裏做東西。早些時候,我必須通過多個對象來構建需要什麼來建立,但現在不是通過多個「數據對象」到具體的類,並具體類依賴於其他類,具體類只需要一個「數據對象」,其中包含的所有信息我需要。

所以,我的電話是這樣的,現在

var data = ContainerData.Getdata(key);//Call to library 

再到建設者最終調用

var conBuilder = new ContainerBuilder(new SingleContainerBuilder(data)); 

Ofcourse具體類的構造函數已更改爲接受「數據」類型

0

@Does每個不同類型的容器必須從模型中去抓取數據,或者是有一個更好的方法嗎?

就像在GOF書中描述,這將一個SOLIDE解決方案。所以你得到了不同類型的建築師自己的具體類型。

一個解決可能是從模型提供的規格,所以你可以使用一個建設者的一組模型。注意:通過這種方式,模型需要知道buidlers,那不是一個乾淨的方式!

@Does每個不同類型的容器必須從模型中去抓取數據,或者是有一個更好的方法嗎?

在任何情況下,容器應直接瞭解該機型。建設者應該這樣做。這是建築師模型的意思。所以建設者應該知道如何從模型中獲取數據。在被調用構建零件的情況下收集數據。

的生成器模式意圖第一部分: 「單獨從其表示的配合物對象的構造,使得同一構建過程可以創建不同的表示」

@Do我需要創建一個副本在我的Web項目中的模型,並從該主模型填充我的本地模型,或者我應該直接查詢混凝土類屬性的主模型?

我不是在你的項目,但我寧願想你不應該建立主數據通常這就是易arror的副本。因此,建設者應該有可能超過需求數據。

+0

感謝您的回答@ratnim。我同意模型部分。其實,我按照這裏討論的想法[鏈接](http://stackoverflow.com/questions/696027/design-pattern-builder)。遵循'數據對象'的想法對我來說似乎是可行的解決方案。但我保持這種questin開放,如果有任何更好的方法那裏有經驗的大師正在使用並能指導我 – Angloos