Sto cercando di progettare un'API. Per creare i contratti di seguito sono i due approcci:
Metodo 1:
public class MyController
{
public void MyAction1(Dictionary<string, dynamic> input)
{
//Use input like below
//Read from input dictionary and apply minimal business logic if needed
//And Call CustomDataProvider library with input object itself(DataProvider designed in such a way that it takes Dictionary and used values as procedure input. Dictionary key is same as procedure arguments.)
}
public void MyAction2(Dictionary<string, dynamic> input)
{
//Use input like below
//Read from input dictionary and apply minimal business logic if needed
//And Call CustomDataProvider library with input object itself(DataProvider designed in such a way that it takes Dictionary and used values as procedure input. Dictionary key is same as procedure arguments.)
}
}
In questo caso non è necessario alcun contratto di dati.
Approccio 2:
public class MyController
{
public void MyAction1(MyContractBusinessObject1 input)
{
//Do normal business logic processing using input object and call DBProvider by creating a dictionary from business object
}
public void MyAction2(MyContractBusinessObject2 input)
{
//Do normal business logic processing using input object and call DBProvider by creating a dictionary from business object
}
}
In questo caso avremo diverse business class come contratto per diversi input di azione. Quale dei suddetti approcci è migliore e perché?
Lasciatemi fare un esempio. Supponiamo che le mie azioni stiano facendo il login e la creazione di nuovi account. Nel primo caso, l'input sarà
new Dictionary<string, dynamic>{
{"Name","myname"},
{"Passowrd",'mypassword'}
}
new Dictionary<string, dynamic>{
{"Name","myname"},
{"Passowrd",'mypassword'},
{"Age",myage},
{"otherInfo",myotherinfo}
}
ma nell'approccio 2 l'input sarà
class Login{
public string Name{get; set;}
public string Password{get; set;}
}
class NewAccount{
public string Name{get; set;}
public string Password{get; set;}
public int Age{get; set;}
public OtherInfo OtherInfo{get; set;}
}