我的應用程序中有一種情況。我從服務中獲得迴應。我需要在緩存中有時在數據庫或其他媒體中轉換並保存響應。可能有一種情況,我不需要堅持響應,但只需要轉換響應並返回對象。我已經實現瞭如下設計:在合成對象中使用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);
}
}
在上面實現,在該方案中,在那裏我只需要對象(無persiatance)轉換,我已經通過了null
持久化對象。這種方法是否正確?任何人都可以爲這種需求提出更好的設計嗎?
你可以添加一個參數的構造函數,而不是通過null。但這真的成爲風格和觀點的問題,這不太適合堆棧溢出。 –
一個思想流派是儘可能避免'if'來檢查'null'。一個空的'IPersistance'(稱爲例如'NoPersistance')實現將起作用。如果您在默認情況下提供超載,那麼它會更平滑。 –