除了“获得”产品之外,工厂模式还要“设置”产品?

时间:2010-11-20 16:58:15

标签: asp.net design-patterns

我是设计模式的新手。我正在寻找一种类似于工厂模式的模式,但这也让我“设置”了产品。像这样:

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

有没有类似的已知模式?谢谢。

编辑:我希望在Session对象中存储“POCO”对象,并使用类来设置/获取它们。我可能希望以后将持久性切换到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 个答案:

答案 0 :(得分:3)

工厂模式是创建设计模式,它封装了复杂对象的创建,并将创建过程与业务逻辑隔离开来。

此处看起来您需要缓存来存储和管理Vehicle实例。我建议您将此类称为 VehicleCache 而不是Factory,并像缓存一样实现。

首先,您应该考虑使用Vehicle对象的标识符和vehicleId。我还建议您按照entity object中所述的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 :(得分:1)

像Unmesh所说,这个名字有点误导。 您只想缓存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;
  }

}