我是设计模式的新手。我正在寻找一种类似于工厂模式的模式,但这也让我“设置”了产品。像这样:
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.
答案 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
}
以下是一些链接,解释了如何以线程安全的方式为应用程序实现此类缓存 -
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;
}
}