Factory method. Consigli su come strutturare un programma per una corr...

martedì 25 agosto 2009 - 09.26

arguros Profilo | Newbie

Ciao.

Ho scritto un programma che sfrutta il factory method e funziona piu' o meno cosi

Interface Instrument {.....}

Bond : Instrument
Stock : Instrument
Fund : Instrument

interface InstrumentCreator { create(ID)} //questo e' il factoryMethod

//Queste sono le classi concrete
BondCreator : InstrumentCreator
StockCreator : InstrumentCreator
FundCreator: InstrumentCreator

Poi ho una Classe Portfolio che e' una collezione di Instrument.
Esempio un portafoglio puo essere composto di

1) Bond Maturity 10 anni, coupon 4%
2) Bond Maturity 5 anni, coupon 2%
...
10) Miscrosoft stock
11) Googlo stock
....

18) JPM Fund Europe Value
19) GS Fund Europe Growth

Quando devo creare il Portofolio. Nella classe PortfolioCreator faccio una cosa del tipo


Class PortfolioCreator {
public Create(PortfolioID) {

//Vedo quali sono gli InstumentIDs che compongono il porfagolio e poi
foreach InstrumetID in InstrumentIDs
{ if (typeof(InstrumentID) == "Bond")
BondCreator.Create(InstrumendID)
else if (typeof(InstrumentID) == "Stock")
StockCreator.Create(InstrumendID)
else if (typeof(InstrumentID) == "Fund")
FundCreator.Create(InstrumendID)
}


il problema e' il seguente.
Ogni volta che aggiungo un tipo di strumento (Options, futures, ...) devo andare a modificare questo pezzo di codice. Quindi la Classe Portfolio non e' "closed for modification and opend for expansion".
A me piacerebbe creare un nuovo instrument, e far si che la classe Portolio funzioni automaticamente senza andare a modiciare il codice ogni volta, evitando di fatto tutta quella serie di if else... if else.. .if else... Non sarebbe alla fin fine proprio questo il fine del factory method pattern?

Avete qualche idea?

Grazie

Pierpaolo


Gluck74 Profilo | Guru

c'è una cosa che non mi torna....
da quello che hai scritto sembra che il portafoglio abbia una collezione di indici che si riferiscono a Instruments.
Come fai a fare il typeof di un indice e ricevere la classe????????

arguros Profilo | Newbie

Ciao,

string Typeof(string instrumentID).

Ritorna un stringa. Poi in base alla string, vedo quale strumento creare.

Il portafoglio e' una collection di intruments.

Pierpaolo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5