2010-04-20 84 views
0

工厂应该坚持他们构建的实体吗?或者这是来电者的工作?伪例传入:工厂是否应该坚持实体?

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(); 
    ... 
    } 

}

是否有一个推荐的做法在这里?

+0

我没有创建这些类所需的所有私有字段,但您应该明白我的想法。 – mxmissile 2010-04-20 21:00:54

+0

谢谢,所有好的答案! – mxmissile 2010-04-20 21:27:30

回答

6

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

+0

我太慢了:p – zincorp 2010-04-20 21:08:38

1

工厂的主要用途是创建的对象。一旦创建了该对象,就由您来决定要使用该对象。

唯一不同的情况是,如果还有一个要求,只有创建的对象的实例应该存在,在这种情况下,您将会有某种伪工厂 - 单例混合模式正在进行。

1

如果您决定使用工厂作为单例对象,则需要管理单例对象的持久性。除此之外,我看不出为什么你想让工厂管理持久性。

事实上,有工厂管理持久性 - 除了涉及到单身人士时 - 会导致恰当分离关注点的恰恰相反,这是首先使用工厂的存在理由。