我正在将具有 UI 层中所有逻辑的 Windows 窗体应用程序转换为 2 层应用程序,将 WCF 用于应用程序/业务逻辑。我们遵循一种模式,服务上的每个方法都接受一个参数,并返回一个响应对象。所有需要的数据都封装在这些对象中。例如:
public GetPersonResponse GetPerson(GetPersonRequest req){
// do stuff
}
public class GetPersonRequest{
String Name{get;set;}
Date BirthDate{get;set;}
}
public class GetPersonResponse{
Person Result {get;set;}
}
我的问题在于客户端的数据绑定。当我转到数据源并显示数据源时,我看到了响应和其中使用的实体,但看不到请求。在上面的示例中,我会看到 GetPersonResponse 和 Person,但看不到 GetPersonRequest。能够将请求对象绑定到表单,并通过一行代码提交整个操作将非常方便:
client.GetPerson((GetPersonRequest) getPersonRequestBindingSource.Current);
或者至少:
GetPersonRequest req = (GetPersonRequest) getPersonRequestBindingSource.Current;
Validate(req);
client.GetPerson(req);
再举一个例子,想象一个 CreatePerson 方法,具有以下 Request 类:
public class CreatePersonRequest{
String Name {get;set;}
String Address {get;set;}
String Address2 {get;set;}
String City {get;set;}
String State {get;set;}
String ZipCode {get;set;}
Integer Age {get;set;}
// more stuff here
}
我不想要这样的代码:
CreatePersonRequest req = new CreatePersonRequest(){
Name = NameTextBox.Text,
Address = AddressTextBox.Text,
Address2 = Address2TextBox.Text,
City = CityTextBox.Text,
State = StateComboBox.SelectedValue,
ZipCode = ZipCodeTextBox.Text,
Age = Integer.ParseInt(AgeTextBox.Text)
}
client.CreatePerson(req);
我宁愿拥有:
client.CreatePerson((CreatePersonRequest) createPersonRequestBindingSource.Current)
恕我直言,这更加简洁和可维护 - 如果将字段添加到请求中,我只需更新 UI 上的小部件,并且代码本身不必更改。
有没有办法让 UI 数据绑定中的数据源识别请求?
.Net 4.0 在客户端和服务器上。
(所有代码都是手写的,所以请不要指望它能够运行:))
编辑:要清楚,请求对象显示在合同中;我可以在后面的代码中制作一个并手动填充它。只是寻找提高生产力的数据绑定功能来工作。