Supponiamo di avere una classe che scarica i dati dall'API, la pulisce e la salva nel database. Quali metodi devo esporre?
class ApiConnector1
{
public string GetDataFromApi()
{
// ...
}
/// <summary>
/// removes unnecessary records
/// </summary>
public string CleanApiData(string apiData)
{
// ...
}
public bool SaveToDb(string processedData)
{
// ...
}
}
class ApiConnector2
{
public string GetDataFromApi()
{
// ...
}
public bool SaveData(string processedData)
{
SaveToDb(CleanApiData(processedData));
}
/// <summary>
/// removes unnecessary records
/// </summary>
private string CleanApiData(string apiData)
{
// ...
}
private bool SaveToDb(string processedData)
{
// ...
}
}
class ApiConnector3
{
public bool GetDataToDb()
{
SaveToDb(CleanApiData(GetDataFromApi()));
}
private string GetDataFromApi()
{
}
private string CleanApiData(string apiData)
{
}
private bool SaveToDb(string processedData)
{
}
}
e utilizzo
// ApiConnector1 usage
var apiConnector = new ApiConnector1();
var apiData = apiConnector.GetDataFromApi();
// show information that data was successfull downloaded
var cleanData = apiConnector.CleanApiData(apiData);
apiConnector.SaveToDb(cleanData);
// ApiConnector2 usage
var apiConnector2 = new ApiConnector2();
var apiData2 = apiConnector2.GetDataFromApi();
// show information that data was successfull downloaded
apiConnector2.SaveData(apiData2);
// ApiConnector3 usage
var apiConnector3 = new ApiConnector3();
apiConnector3.GetDataToDb();
I miei pensieri: Nell'approccio 1 quando qualcuno vuole usare la classe deve chiamare il metodo nell'ordine corretto, che può creare bug se non lo fa. D'altra parte in approccio 3 è facile da usare, ma introduce poca magia (non sa cosa accadrà), ed è difficile da test unitario.