寻找一些指导。
我正在构建一个带有WCF作为后端服务的SL4应用程序。我的WCF服务层位于域模型上,我正在使用汇编程序将我的域实体转换为屏幕特定的DTO。
我有一个屏幕(安全相关),显示用户和他们所属的组,现在用户可以为用户添加和删除组,之后他们可以点击应用按钮。只有当点击此应用按钮时,才会提交更改。
目前我有一个UserDetailDto,它被发送到客户端以填充屏幕,我打算申请将UserDetailUpdateD发送回服务器以执行对域模型的实际更新。
这听起来不错吗?
如果是这样,当用户在客户端进行更改时,我的UserDetailUpdateD应该发回更改,即。什么被添加,什么被删除。
不确定,指导会很棒。
答案 0 :(得分:0)
当对需求和部署环境了解太多时,指导总是很棘手。但是,你的方法对我来说听起来很合理。我喜欢的关键事项是:
1)您将DTO与您的域实体分开。在小型简单的应用程序中,通过网络发送实体可以很好,但随着复杂性和功能的增加,它们可以开始相互融合。
2)您区分Query对象(UserDetailDto)和Command对象(UserDetailUpdateDto)。同样,通常可以使用单个对象来满足这两个对象,但是随着复杂性/函数的增加,您将开始膨胀,因为对象正在为两个主服务器提供服务(Query对象将在客户端使用,而Command对象将在服务器)。我使用一种惯例,其中所有命令DTO都以动词(例如UpdateUserDetail)开头,它只是使得更容易对数据进行排序'来自'方法'在客户端。
如果SL应用程序可能变得越来越大,屏幕逻辑越复杂,那么可能值得查看Model-View-ViewModel(MVVM)模式。它允许您将屏幕设计与屏幕功能分开。它为分发开发团队的工作提供了更大的灵活性,并更好地支持单元测试。
至于在UpdateUserDetail对象中发回的内容,我认为这应该以在域模型(或位于域模型上的WCF服务)最容易使用的内容为指导。通常,对于DTO来说,越小越好。