2010-04-20 129 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

如果您決定使用工廠作爲單例對象,則需要管理單例對象的持久性。除此之外,我看不出爲什麼你想讓工廠管理持久性。

事實上,有工廠管理持久性 - 除了涉及到單身人士時 - 會導致恰當分離關注點的恰恰相反,這是首先使用工廠的存在理由。