c# - 生成器设计模式 : Accessing/Passing model data to/in Concrete classes

标签 c# asp.net design-patterns

这是我的构建器界面:

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,它们是主模型中已有属性的本地声明。我看不到或不理解本地模型的意义,我不确定我是否在这里。

抱歉,我是设计模式的新手。

任何帮助将不胜感激,

谢谢

最佳答案

我创建了一个在构建器初始化之前调用的库,我将我需要的容器的“ key ”发送到库静态方法,库根据“ key ”返回我需要的数据,然后我将该对象传递给构建器并在那里做一些事情。早些时候我不得不传递多个对象来构建需要构建的东西,但现在不是将多个“数据对象”传递给具体类并使具体类依赖于其他类,具体类只需要一个包含所有信息的“数据对象”我需要。

所以我的电话现在看起来像这样

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

然后最后调用builder是

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

当然,具体类的构造函数已更改为接受“数据”类型

关于c# - 生成器设计模式 : Accessing/Passing model data to/in Concrete classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159330/

相关文章:

c# - WPF 筛选列表框

asp.net - 如何在 aspx 文件中创建区域?

asp.net - 为什么在尝试保存更改时 GridView 行 "null"的 DataItem 为空?

asp.net - session 变量可以容纳的最大大小是多少?

java - 单例模式 - 早期绑定(bind)(涉及静态变量)是否减少了互斥锁的需要?

java - 设计模式 - 我应该在哪里操作从数据库检索的字符串。离它更近还是更远

c# - Visio 文档变量

c# - 引用创建类的不同表现

java - 我如何打印这个?

c# - 如何将 DataTable 转换为 List<object>?