1

我正在将具有 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 在客户端和服务器上。

(所有代码都是手写的,所以请不要指望它能够运行:))

编辑:要清楚,请求对象显示在合同中;我可以在后面的代码中制作一个并手动填充它。只是寻找提高生产力的数据绑定功能来工作。

4

1 回答 1

0

好吧,我想我想通了。如果添加新数据源并选择对象,对象仍会出现。它们位于服务的命名空间中。

让“服务”选项为我提供所需的一切仍然会很好,但是很遗憾 - 如果编程很容易,那么每个人都会这样做。

于 2012-10-15T12:17:46.880 回答