디자인 패턴에 익숙하지 않고 이제는 전략 patern을 구현하고 싶습니다. 내 코드는 다음과 같습니다.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 클래스로 보내기 항목이 전송됩니다. 내 질문은이 클래스의 데이터베이스에 연결해야합니까? 그렇다면 SendTask의 데이터베이스에 연결해야합니다. 그러나이 시점에서 나는 스스로 반복하고 있습니까? 따라서 연결 문자열이 변경되면 모든 클래스에서이 값을 수정해야합니다. 이 문제를 어떻게 해결할 수 있습니까?
응답을위한 Thnx입니다. 나는 정말로 마지막 부분을 얻지 못한다. 따라서 인터페이스의 Send 메서드는 이제 Send (IDatabaseConnection db)와 비슷하게 보입니까? _databaseConnection은 ISendBehavior의 멤버 변수이며 _databaseConnection = db를 보내는 방법의 멤버 변수입니다. 하지만 Send 메서드를 호출하려면 어떻게해야합니까? 그리고 쿼리의 설정은 어디에서해야합니까? – Martijn
예제 코드에서 DatabaseConnection을 SendAppointment-constructor (_databaseConnection 멤버를 설정 함)에 전달합니다. 해당 DatabaseConnection에는 데이터베이스 관련 내용을 저장합니다. 가장 빠른 방법은 연결 문자열 등을 저장하고 SendAppointment 클래스에서 쿼리를 수행하는 것입니다. 이렇게하면 연결 문자열을 한 번만 지정하면됩니다. (가장 깨끗한 방법은 모든 데이터베이스 코드를 추가 클래스에 넣고 SendAppointment가 해당 클래스를 사용하여 데이터베이스 작업을 수행하도록하는 것입니다.) – Lennaert
그래서 가장 깨끗한 방법으로 다른 데이터베이스 클래스를 만들어서 SendAppointment가 그것의 인스턴스. 이렇게하면 SendAppointment()에 매개 변수로 연결을 보낼 필요가 없습니다. 이 메서드에서 인스턴스를 만들기 때문에. 이렇게하면 SendAppointment의 Send 메서드가 모든 쿼리를 만듭니다. 이 올바른지? – Martijn