我是新來的設計模式,現在我想實施戰略模式。這裏是我的代碼:C#戰略模式和數據庫訪問
namespace StrategyPattern
{
public interface ISendBehavior
{
void Send();
}
public class SendAppointment : ISendBehavior
{
public void Send()
{
// send item
}
}
public class SendTask : ISendBehavior
{
public void Send()
{
// send item
}
}
public class SendItem
{
ISendBehavior _sendBehavior;
public SendItem(ISendBehavior sendbehavior)
{
_sendBehavior = sendbehavior;
}
public void Send()
{
_sendBehavior.Send();
}
}
/* CALL */
public class Aanroep
{
public void Verzenden()
{
SendItem app = new SendItem(new SendAppointment());
app.Send();
}
}
}
在SendAppointment類的Send方法中,將發送該項目。我的問題是,我必須連接到這個類的數據庫嗎?如果是這樣,那麼我還必須連接到SendTask中的數據庫。但在這一點上,我重複自己的權利?所以如果連接字符串發生變化,我必須在每個類中修改它。我怎麼解決這個問題?
Thnx用於響應。我不是真的最後一部分。因此,接口中的發送方法現在看起來像這樣發送(IDatabaseConnection db)?而_databaseConnection是ISendBehavior中的一個成員變量,並且在方法中發送了_databaseConnection = db?但是,我如何調用發送方法?我需要在哪裏設置查詢? – Martijn 2009-09-22 10:12:20
您應該注意到,在示例代碼中,我將DatabaseConnection傳遞給了SendAppointment構造函數(它將設置_databaseConnection成員)。 在那個DatabaseConnection中,你存儲任何與數據庫相關的東西。最快的方法是僅存儲連接字符串等,並仍然執行SendAppointment類的查詢 - 這樣,您只需指定連接字符串一次。 (最簡潔的方法是將所有數據庫代碼放在額外的類中,並讓SendAppointment使用該類的實例來執行數據庫操作。) – Lennaert 2009-09-22 10:27:45
因此,對於最簡潔的方法,我必須創建另一個數據庫類並讓SendAppointment使它的一個實例。這樣,我不必將連接作爲參數發送給SendAppointment()吧?因爲我在這個方法中創建了一個實例。這樣SendAppointment的Send方法創建所有查詢。它是否正確? – Martijn 2009-09-22 10:38:46