有一个服务可以使用Customer
实体。
服务已经实现了GetCustomer
方法,该方法返回CustomerDTO
。
服务必须实施更改客户Phone
,Address
,SalesManager
和Discount
的方法。允许客户仅更改Phone
和Address
,允许销售总监仅更改客户的SalesManager
,而允许销售经理仅更改客户的Discount
。
ChangeCustomer
吗?
CustomerDTO
GetCustomer
作为ChangeCustomer(CustomerDTO)
方法中的返回类型,例如CustomerChangeDTO
?ChangeCustomer(CustomerChangeDTO)
,例如ChangeCustomerPhone
?ChangeCustomerAddress
,ChangeCustomerManager
,ChangeCustomerDiscount
和CustomerDTO
吗?
ChangeCustomerName(CustomerDTO)
,例如ChangeCustomerName(CustomerNameChangeDTO)
,...?CustomerDTO
,...?似乎单个DTO类使服务更容易在客户端上使用,因为所有客户端必须做的是请求CustomerDTO
,更改其中的一些属性并发回。服务是处理Customer
中的所有更改,并将业务逻辑应用于真实this.class.classLoader.parseClass("/home/jenkins/GitlabPostbuildReporter.groovy")
GitlabPostbuildReporter.newInstance(manager).report()
实体以及其他实体。
每种变体还有其他优缺点吗?
答案 0 :(得分:1)
您的WCF服务位于应用程序层中,因此每个用例都应该有一个单独的方法。你在这里显然有3个用例:
Phone
和Address
SalesManager
Discount
所以你的服务应该暴露3种方法。这些方法中的每一个都不仅要更新Customer
实体,还必须先检查权限。如果您尝试在1方法中实现它,您将会遇到很多if
和不明确的行为。例如,如果销售经理尝试更改Discount
和Phone
,该怎么办?忽略Phone
?抛出异常?
每个方法都应使用不同的DTO,仅包含该方法所需的属性。 (顺便说一句,您可以在班级名称中更改' DTO'命令'例如ChangeCustomerDiscountCommand
。看起来比DTO&#39;更好。< / p>
如果您使用单个DTO,那么客户会感到困惑(为什么课堂上还有其他属性?如果我将它们留空会发生什么?如果我更改它会怎么样?等等。)