我正在将一个Windows窗体应用程序与UI层中的所有逻辑转换为一个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在客户端和服务器上。
(所有代码都是手写的,所以请不要指望它能够运行:))
编辑:要清楚,请求对象显示在合同中;我可以在后面的代码中创建一个并手动填充它。只是寻找提高生产力的数据绑定功能。
答案 0 :(得分:0)
嗯,我想我已经明白了。如果添加新数据源,则仍会显示对象,然后选择对象。它们位于服务的命名空间中。
让服务选项给我所需的一切仍然很好,但唉 - 如果编程很容易,每个人都会这样做。