신청서에 문제가 있습니다. 서비스에서 응답을 얻고 있습니다. 때로는 데이터베이스 또는 일부 다른 미디어에서 때로는 캐시에서 응답을 변환하고 저장해야합니다. 응답을 유지할 필요가 없지만 응답 만 변환하고 객체를 반환 할 필요가있는 시나리오도있을 수 있습니다. 나는 다음과 같은 설계 구현 : 난 단지 객체 (NO persiatance)을 변환하는 데 필요한 시나리오에서는, 위의 구현에서구성된 오브젝트에서 Null을 플래그로 사용하는 것이 좋은가요?
public class Response { }
class MyData { }
interface IPersistance
{
public void PersistData(MyData data);
}
public class DBPersitance : IPersistance
{
public void PersistData(MyData data) { }
}
public class CachePersitance : IPersistance
{
public void PersistData(MyData data) { }
}
public class MySeviceData
{
private IPersistance persistence;
public MySeviceData(IPersistance persistance)
{
_persistance = persistance;
}
public MyData GetServiceData(Response reponseXML)
{
MyData output = new MyData();
// Here output object is filled with data from responseXML
// Object persistance as defined in constructor
if(_persistance!=null)
_persistance.PersistData(output);
return output;
}
}
class Program
{
static void Main(string[] args)
{
MyData output = new MyData();
Response responseXML = new Response() ;
//Case 1: Cache the response
CachePersitance cache = new CachePersitance();
MySeviceData srvData = new MySeviceData(cache);
output = srvData.GetServiceData(responseXML);
//Case 2: Write the response in Database
DBPersitance db = new DBPersitance();
MySeviceData srvData = new MySeviceData(db);
output = srvData.GetServiceData(responseXML);
//Case 3: No need to persist. Only Convert and return the response
MySeviceData srvData = new MySeviceData(null);
output = srvData.GetServiceData(responseXML);
}
}
을, 나는 null
지속성 객체를 전달했습니다. 이 접근법이 맞습니까? 아무도 이런 종류의 요구 사항에 대해 더 나은 디자인을 제안 할 수 있습니까?
당신은 대신 매개 변수가없는 생성자를 추가 할 수 있습니다 같이 사용하지
(매개 변수는
MyServiceData
생성자 오버로드에 설명 할 수있는 지속성을 의미) 널 (NULL)을 전달합니다. 그러나 이것은 실제로 스타일과 의견의 문제가되어 Stack Overflow에 적합하지 않습니다. –한 가지 생각은 가능하다면'null'을 확인하기 위해'if'를 피하는 것입니다. 빈'IPersistance' (예를 들면'NoPersistance') 구현이 효과적입니다. 기본값 인 곳에서 오버로드를 제공하면 더욱 부드럽게됩니다. –