生成器设计模式:Accessing/Passing 模型数据 to/in 具体 类
Builder Design Pattern : Accessing/Passing model data to/in Concrete classes
这是我的生成器界面:
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();
现在我遇到的问题/困惑是如何将模型数据传递给具体的 类?我是 confused/stuck 的原因是可能有多个不同的容器(可能超过 20-30 个)。是否每种不同类型的容器都必须去从模型中获取数据,或者是否有更好的方法?
我感到困惑的第二件事是,我的模型在不同的库中。我是否需要在我的 Web 项目中创建模型的副本并从该主模型填充我的本地模型,或者我应该直接查询主模型的具体 Class 属性?如您所见,我的 SingleContainer 包含 BaseProperties,它们是主模型中已有属性的本地声明。我看不到或不理解本地模型的意义,我不确定我是否在这里。
抱歉,我是设计模式的新手。
任何帮助将不胜感激,
谢谢
@是否每种不同类型的容器都必须去从模型中获取数据,还是有更好的方法?
就像 GOF 书中描述的那样,这将是一个可靠的解决方案。因此,您为每种不同的类型都获得了自己的具体类型的构建器。
解决方法可能是提供模型的规范,这样您就可以为一组模型使用构建器。请注意:通过这种方式,模型需要了解建造者,这不是一种干净的方式!
@是否每种不同类型的容器都必须去从模型中获取数据,还是有更好的方法?
在任何情况下,容器都不应直接知道模型。建造者应该这样做。这就是建造者模式的意义所在。所以构建者应该知道如何从模型中获取数据。收集数据以防他被叫来构建零件。
建造者模式的第一部分意图:
"Seperate the construction of an complexe object from its representation so that the same construction process can create different representation"
@我是否需要在我的 Web 项目中创建模型的副本并从该主模型填充我的本地模型,或者我应该直接查询混凝土的主模型 Class属性?
我不参与你的项目,但我认为你不应该构建通常容易出错的主数据的副本。因此建造者应该得到超出需要数据的可能性。
我创建了一个在构建器初始化之前调用的库,我将我需要的容器的 'Key' 发送到库静态方法,库根据'Key' 然后我将该对象传递给构建器并在那里做一些事情。早些时候我不得不传递多个对象来构建需要构建的东西,但现在不是将多个 'Data Objects' 传递给具体的 classes 而是使具体的 classes 依赖于其他 class ], 具体 classes 只需要一个 'Data Object' 包含我需要的所有信息。
所以我的电话现在看起来像这样
var data = ContainerData.Getdata(key);//Call to library
然后对构建器的最终调用是
var conBuilder = new ContainerBuilder(new SingleContainerBuilder(data));
当然,具体 class 的构造函数已更改为接受 'data' 类型
这是我的生成器界面:
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();
现在我遇到的问题/困惑是如何将模型数据传递给具体的 类?我是 confused/stuck 的原因是可能有多个不同的容器(可能超过 20-30 个)。是否每种不同类型的容器都必须去从模型中获取数据,或者是否有更好的方法?
我感到困惑的第二件事是,我的模型在不同的库中。我是否需要在我的 Web 项目中创建模型的副本并从该主模型填充我的本地模型,或者我应该直接查询主模型的具体 Class 属性?如您所见,我的 SingleContainer 包含 BaseProperties,它们是主模型中已有属性的本地声明。我看不到或不理解本地模型的意义,我不确定我是否在这里。
抱歉,我是设计模式的新手。
任何帮助将不胜感激,
谢谢
@是否每种不同类型的容器都必须去从模型中获取数据,还是有更好的方法?
就像 GOF 书中描述的那样,这将是一个可靠的解决方案。因此,您为每种不同的类型都获得了自己的具体类型的构建器。
解决方法可能是提供模型的规范,这样您就可以为一组模型使用构建器。请注意:通过这种方式,模型需要了解建造者,这不是一种干净的方式!
@是否每种不同类型的容器都必须去从模型中获取数据,还是有更好的方法?
在任何情况下,容器都不应直接知道模型。建造者应该这样做。这就是建造者模式的意义所在。所以构建者应该知道如何从模型中获取数据。收集数据以防他被叫来构建零件。
建造者模式的第一部分意图: "Seperate the construction of an complexe object from its representation so that the same construction process can create different representation"
@我是否需要在我的 Web 项目中创建模型的副本并从该主模型填充我的本地模型,或者我应该直接查询混凝土的主模型 Class属性?
我不参与你的项目,但我认为你不应该构建通常容易出错的主数据的副本。因此建造者应该得到超出需要数据的可能性。
我创建了一个在构建器初始化之前调用的库,我将我需要的容器的 'Key' 发送到库静态方法,库根据'Key' 然后我将该对象传递给构建器并在那里做一些事情。早些时候我不得不传递多个对象来构建需要构建的东西,但现在不是将多个 'Data Objects' 传递给具体的 classes 而是使具体的 classes 依赖于其他 class ], 具体 classes 只需要一个 'Data Object' 包含我需要的所有信息。
所以我的电话现在看起来像这样
var data = ContainerData.Getdata(key);//Call to library
然后对构建器的最终调用是
var conBuilder = new ContainerBuilder(new SingleContainerBuilder(data));
当然,具体 class 的构造函数已更改为接受 'data' 类型