C# 生成器设计模式:访问/传递模型数据到具体类中
以下是我的生成器界面:C# 生成器设计模式:访问/传递模型数据到具体类中,c#,asp.net,design-patterns,C#,Asp.net,Design Patterns,以下是我的生成器界面: public interface IContainerBuilder { void SetSections(); void SetSides(); void SetArea(); WebControl GetContainer(); } 这是我的混凝土建造工: public class SingleContainerBuilder:BaseProperties, IContainerBuilder { Panel panel = new Panel(
public interface IContainerBuilder {
void SetSections();
void SetSides();
void SetArea();
WebControl GetContainer();
}
这是我的混凝土建造工:
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,它是主模型中已经存在的属性的本地声明。我看不到或不理解本地模型的意义,我也不确定我是否在这里
对不起,我是新来的设计模式
我们非常感谢您的帮助
谢谢@每种不同类型的容器都必须从模型中获取数据,还是有更好的方法
就像GOF书中描述的那样,这将是一个可靠的解决方案。因此,每种不同类型的建筑都有自己的混凝土类型
一种解决方法是提供模型的规范,这样您就可以为一组模型使用生成器。注意:这样模特们就需要了解制造者,这不是一个干净的方法
@是每种不同类型的容器都必须从模型中获取数据,还是有更好的方法
在任何情况下,容器都不应该直接知道模型。建筑商应该这样做。这就是建筑工人家长所说的。因此,构建者应该知道如何从模型中获取数据。收集数据,以防他被叫去制造零件
构建器模式意图的第一部分:
“将complexe对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示”
@我是否需要在web项目中创建模型的副本并从主模型填充本地模型,还是应该直接查询主模型中的具体类属性
我不了解你们的项目,但我认为你们不应该建立通常容易出错的主数据副本。因此,构建器应该获得超出所需数据的可能性。我创建了一个库,在构建器初始化之前调用该库,我将需要的容器的“键”发送到库静态方法,库根据“键”返回我需要的数据,然后我将该对象传递给构建器并在那里执行操作。早些时候,我必须传递多个对象来构建需要构建的内容,但现在,不再将多个“数据对象”传递给具体类,使具体类依赖于其他类,具体类只需要一个包含我所需所有信息的“数据对象” 现在我的电话是这样的
var data = ContainerData.Getdata(key);//Call to library
然后对builder的最后一个调用是
var conBuilder = new ContainerBuilder(new SingleContainerBuilder(data));
当然,concrete类的构造函数已更改为接受“data”类型谢谢@ratnim的回答。我同意模型部分。实际上,我遵循了这里讨论的想法。到目前为止,遵循“数据对象”的想法对我来说似乎是可行的解决方案。但如果有任何经验丰富的大师正在使用并能指导我的更好的方法,我会保持这个问题的开放性