工厂应该坚持实体吗?

时间:2010-04-20 20:59:44

标签: c# design-patterns

工厂应该坚持他们建造的实体吗?或者那是打电话的工作?伪示例传入:

    public class OrderFactory
    {
      public Order Build()
      {
        var order = new Order();
        ....
        return order;
      }
    }

public class OrderController : Controller
{
    public OrderController(IRepository repository)
    {
       this.repository = repository;
    }

    public ActionResult MyAction()
    {
       var order = factory.Build();
       repository.Insert(order);
       ...
    }
}

public class OrderFactory
{
  public OrderFactory(IRepository repository)
  {
     this.repository = repository;
  }

  public Order Build()
  {
    var order = new Order();
    ...
    repository.Insert(order);
    return order;
   }
}

public class OrderController : Controller
{
  public ActionResult MyAction()
  {
     var order = factory.Build();
     ...
  }

}

这里有推荐做法吗?

3 个答案:

答案 0 :(得分:6)

作为一般规则,工厂只有一个责任:创建一个实例并将其返回。我不会混淆持久性。我认为这是另一个班级的责任。在这种情况下,它将是控制器。

答案 1 :(得分:1)

工厂的主要目的是对象的创建。一旦创建了该对象,由您自己决定要用它做什么。

唯一不同的情况是,如果还要求只存在一次创建对象的实例,在这种情况下,你将会有某种伪工厂单例混合模式。

答案 2 :(得分:1)

如果决定将工厂用于单件对象,则需要管理单例对象的持久性。除此之外,我不明白你为什么要让工厂管理持久性。

实际上,让工厂管理持久性 - 除了涉及单身人士之外 - 会导致与正确分离关注点完全相反,这是首先使用工厂的存在理由。