2011-12-14 16 views
1

私の質問はコンストラクタ/パラメータ注入の選択方法は?

だが、私はこれがうまく機能している新しい順

class BookingMessager : IBookingMessager{ 
    BookingMessager(IBookingDataSource source,IBookingMessageFactory messageFactory,IMessager messager){ 
    this.source = source; 
    this.messageFactory= messageFactory; 
    this.messager = messager; 
    } 
    void SendBookingMessage(int idBooking){ 
    Booking aBooking = source.GetById(idBooking); 
    BookingMessage aMessage = messageFactory.Create(aBooking); 
    messager.SendMessage(aBooking.Shop.Contact,aMessage.Title,aMessage.Content); 
    } 
} 

がある場合にはショップにメールを送信するため、このプロセスを持っているとしましょう...少しあいまいです。

新しい要件:ショップに応じてメッセージ本文を変更する必要があります。これらのソリューションについていえ

I:私はその

BookingMessage Create(Booking aBooking){ 
return this.BookingMessageFactoryIndex.ContainsKey(aBooking.Shop.ID) ? this.BookingMessageFactoryIndex[aBooking.Shop.ID].Create(aBooking) : this.default.Create(aBooking); 
} 

それともパラメータとしてIBookingMessageFactoryを注入し、それは私を強制しますのようなお店に応じて必要IBookingMessageFactoryと呼ぶことにしますIBookingMessageFactoryを作成私は、コンストラクタとパラメータ注入の間で選択するにはどうすればよい??OK、私の最初のコードは私のインターフェースIBookingMessager :(最善の解決策は何

を更新?

+0

@ JesseC.Slicerできませんよ! –

答えて

1

IBookingMessageFactory Rまかせ私は、店舗固有のBookingMessageがうまく見えます。ショップ固有の実装にデリゲートするコンポジット/デコレータIBookingMessageFactoryを使用しているようです。

+0

はい、このソリューションでは、私はいくつかの種類のlasaganaコードで終わるでしょうか? –

+0

ラザニアにはレイヤーがあるので、それは良いです。スパゲットは悪いです:-)。何が問題ですか? – Steven

+0

ラザニアは読めない/デバッグ可能かもしれませんか? –