我是新来的设计模式,现在我想实施战略模式。这里是我的代码: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