Должны ли фабрики сохраняться? - PullRequest
0 голосов
/ 21 апреля 2010

Должны ли фабрики сохранять сущности, которые они строят? Или это работа звонящего? Псевдо-пример Входящие:

    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 ]

6 голосов
/ 21 апреля 2010

Как правило, на фабрике лежит только одна обязанность: создать экземпляр и вернуть его. Я не стал бы смешивать в постоянстве. Я бы расценил это как ответственность другого класса. В этом случае это будет контроллер.

1 голос
/ 21 апреля 2010

Если вы решите использовать фабрику для одноэлементных объектов, вам нужно будет управлять постоянством одноэлементного объекта. Кроме этого, я не понимаю, почему вы хотите, чтобы фабрики управляли постоянством.

На самом деле, если фабрики управляют постоянством - за исключением случаев, когда задействованы синглоны, - это может привести к полной противоположности правильному разделению интересов, что является смыслом использования фабрики в первую очередь.

1 голос
/ 21 апреля 2010

Основной целью Фабрики является создание объектов.После того, как этот объект был создан, вам решать, что вы хотите с ним делать.

Единственный случай, когда это будет отличаться, - это если существует требование, что должен существовать только один экземпляр созданного объекта., в этом случае у вас будет какой-то гибридный паттерн псевдо-фабрика-синглтон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...