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的回答。我同意模型部分。实际上,我遵循了这里讨论的想法。到目前为止,遵循“数据对象”的想法对我来说似乎是可行的解决方案。但如果有任何经验丰富的大师正在使用并能指导我的更好的方法,我会保持这个问题的开放性