2010-11-20 8 views
0

私はデザインパターンに新しいです。私は工場のパターンに似た模様を探していますが、それはまた私にその製品を "セット"させます。次のようなものがあります:「get」製品に加えて「set」製品を出荷するための工場パターン?

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

このようなパターンはありますか?ありがとうございました。

編集:セッションオブジェクトに "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. 
+1

あなたはどのような問題を解決しようとしていますか?なぜこのパターンが必要ですか? –

+0

セットパートが必要な理由を説明できますか?あなたが別の問題を解決しようとしているように感じます – Marcus

+0

私はさらに情報を追加しました。ご協力ありがとうございました。 –

答えて

3

Factoryパターンは、複雑なオブジェクトの作成をカプセル化し、ビジネス・ロジックから作成プロセスを分離して生成に関するデザインパターンです。

ここでキャッシュにVehicleインスタンスを保存して管理したいと思うようです。このクラスをFactoryクラスではなくVehicleCacheと呼び、キャッシュのように実装することをお勧めします。

まず、vehicleIdのようなVehicleオブジェクトの識別子と識別子を考慮する必要があります。 Domain Driven Designに記載されているようにentity objectとして実装することをお勧めします。

その後は、このようなあなたのキャッシュを実装することができます - ここで

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

​​

+0

それは本当に有用な情報でしたUnmesh。 –

+0

ありがとうございます。また、デザインパターンの初心者の方は、ヘッドファーストデザインパターンの読み込みを検討する必要があります。http://oreilly.com/catalog/9780596007126 –

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; 
    } 

} 
+0

マーカスもありがとうございました。 –