Ho difficoltà a decidere come progettare questa API di servizio.
public class GetCurrentValuesRequest
{
public int ReferenceID { get; set; }
public int[] FilterIDs { get; set; }
}
public class GetDefaultValuesRequest
{
public int[] FilterIDs { get; set; }
}
public class GetValuesAsOfDateRequest
{
public int ReferenceID { get; set; }
public int[] FilterIDs { get; set; }
public DateTime AsOf { get; set; }
}
public class GetValuesAsOfChangeSetRequest
{
public int ReferenceID { get; set; }
public int[] FilterIDs { get; set; }
public long ChangeSetIDs { get; set; }
}
public class GetProposedValuesRequest
{
public int ReferenceID { get; set; }
public int[] FilterIDs { get; set; }
public long ApprovalKey { get; set; }
}
public class GetValuesIfModifiedRequest
{
public int ReferenceID { get; set; }
public int[] FilterIDs { get; set; }
public DateTime Since { get; set; }
}
public class GetValuesResponse
{
public string[] Results { get; set; }
}
public class GetValuesIfModifiedResponse
{
public string[] Results { get; set; }
public bool IsModified { get; set; }
}
public interface IService
{
GetValuesResponse GetValues(GetCurrentValuesRequest request);
GetValuesResponse GetValues(GetDefaultValuesRequest request);
GetValuesResponse GetValues(GetValuesAsOfDateRequest request);
GetValuesResponse GetValues(GetValuesAsOfChangeSetRequest request);
GetValuesResponse GetValues(GetProposedValuesRequest request);
GetValuesIfModifiedResponse GetValuesIfModified(GetValuesIfModifiedRequest request);
}
Ho pensato di modificarlo per rendere le sottoclassi di richiesta / risposta IfModified
della semplice risposta di richiesta GetValues
e includendo solo una chiamata GetValues
. Il server restituirebbe una risposta diversa a seconda della richiesta di input, ma che richiede all'utente di chiamare IService
this:
var response = (GetValuesIfModifiedResponse)serviceClient.GetValues(new GetValuesIfModifiedRequest() { ... });
Ho anche pensato di posizionare IsModified
nel GetValuesResponse
semplice e di popolarlo solo se viene passato un GetValuesIfModifiedRequest
. Ma sembra un po 'strano includerlo in un risultato di un metodo che in realtà non fa nulla con esso. Inoltre, potrebbe lanciare un utente se lo vede e si aspetta di poterlo usare nel proprio codice. bool? IsModified
è migliore, ma non sono ancora interamente venduto su di esso.
Qualche suggerimento su come progettare al meglio questa API?