Заводской шаблон для «установки» продукта в дополнение к «получению» продукта? - PullRequest
0 голосов
/ 20 ноября 2010

Я новичок в разработке шаблонов. Я ищу модель, похожую на фабричную модель, но это также позволит мне «настроить» продукт. Примерно так:

class VehicleFactory
{
    IVehicle static GetVehicle();
    void static SetVehicle(IVehicle vehicle);
}

Существует ли какой-либо известный шаблон, похожий на этот? Спасибо.

РЕДАКТИРОВАТЬ: я хочу сохранить объекты "POCO" в объекте Session и использовать класс для установки / получения их Я могу хотеть переключить постоянство на ViewState / базу данных в будущем. Вот что у меня есть:

// object to persist in Session.
class Vehicle
{
    string Make { get; set; }
    string Model { get; set; }
}

// class to set/ get object from Session.
// Please see VehicleFactory above.

Ответы [ 2 ]

3 голосов
/ 20 ноября 2010

Фабричный шаблон - это шаблон творческого проектирования с инкапсулированием создания сложного объекта и изоляцией процесса создания от вашей бизнес-логики.

Здесь, похоже, вы хотите кэш для хранения и управления экземплярами Vehicle.Я бы порекомендовал вам называть этот класс VehicleCache , а не Factory, и реализовывать его как кеш.

Во-первых, вы должны рассмотреть вопрос об использовании и идентификаторе для объекта Vehicle, например vehicleId.Я бы также рекомендовал вам реализовать его как объектный объект , как описано в Domain Driven Design .

Затем вы можете реализовать свой кэш следующим образом -

public class VehicleCache
{
    public void Add(IVehicle instanceToAdd)
    {
    // Store instance in session object
    }

    public IVehicle Get(string id) 
    {
     // search and return vehicle from cache
    }

    // more methods and indexer if required
}

Вот несколько ссылок, объясняющих, как вы можете реализовать такой кеш для своего приложения в поточно-ориентированном режиме -

https://blogs.infosupport.com/blogs/frankb/archive/2008/12/31/Implementing-a-Thread-Safe-cache-using-the-Parallel-Extensions.aspx

http://www.objectreference.net/post/Implementing-Generic-Caching.aspx

1 голос
/ 20 ноября 2010

Как говорит Унмеш, название вводит в заблуждение.Вы просто хотите кэшировать объект IVehicle.

IVehicleCache
{
  IVehicle GetVehicle();
  void SetVehicle(IVehicle vehicle);
}

// Implementation for http session

public class HttpSessionVehicleCache : IVehicleCache
{
  public IVehicle GetVehicle()
  {
    return (IVehicle)HttpContext.Current.Session["Vehicle"];
  }

  void SetVehicle(IVehicle vehicle)
  {
    HttpContext.Current.Session["Vehicle"] = vehicle;
  }

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