C# 我应该为每个服务方法创建一个单独的DTO类吗?
有一项服务可与C# 我应该为每个服务方法创建一个单独的DTO类吗?,c#,web-services,wcf,architecture,soa,C#,Web Services,Wcf,Architecture,Soa,有一项服务可与客户实体合作 服务已经实现了一个GetCustomer方法,该方法返回一个CustomerDTO 服务必须实施更改客户的电话、地址、销售经理和折扣的方法。客户只允许更改电话和地址,销售总监只允许更改客户的销售经理,而销售经理只允许更改客户的折扣 我是否应该只创建一种服务方法ChangeCustomer? 我是否应该使用CustomerDTO作为GetCustomer方法中的返回类型,例如ChangeCustomer(CustomerDTO) 我是否应该使用其他CustomerCh
客户
实体合作
服务已经实现了一个GetCustomer
方法,该方法返回一个CustomerDTO
服务必须实施更改客户的电话
、地址
、销售经理
和折扣
的方法。客户只允许更改电话
和地址
,销售总监只允许更改客户的销售经理
,而销售经理只允许更改客户的折扣
ChangeCustomer
?
- 我是否应该使用
作为CustomerDTO
方法中的返回类型,例如GetCustomer
ChangeCustomer(CustomerDTO)
- 我是否应该使用其他
,例如CustomerChangeDTO
ChangeCustomer(CustomerChangeDTO)
ChangeCustomerPhone
,ChangeCustomerAddress
,ChangeCustomerManager
和ChangeCustomerDiscount
?
- 我是否应该在这些服务方法中使用
,例如CustomerDTO
ChangeCustomerName(CustomerDTO)
- 我是否应该在每个服务方法中使用单独的DTO类,例如,
ChangeCustomerName(CustomerMechanageDTO)
CustomerDTO
,更改它的一些属性并发送回。服务是处理CustomerDTO
中的所有更改,并将业务逻辑应用于realCustomer
实体和其他实体
每个变体还有其他优点/缺点吗?您的WCF服务位于应用程序层,因此每个用例都应该有一个单独的方法。这里有3个用例:
电话
和地址
折扣
客户
实体,还必须首先检查权限。如果您尝试用一种方法来实现它,您将得到大量的If
s和不清楚的行为。例如,如果销售经理试图更改折扣
和电话
,该怎么办?忽略电话
?抛出异常
每个方法都应该使用不同的DTO,只包含该方法所需的属性。(顺便说一句,您可以将类名中的“DTO”更改为“Command”——例如ChangeCustomerDiscountCommand
。看起来比“DTO”更好)
如果您使用一个DTO,客户端会感到困惑(为什么类中有其他属性?如果我将它们保留为空会发生什么?如果我更改它们会发生什么?等等)嗨,Jakub,他是否需要在域层中使用包含所有属性的完整Customer类?首先从资源访问(CustomerRA->Customer)加载Customer域类,然后在检查安全性后应用必要的更改,然后将完整的Customer类转换为CustomerRA以传递给资源进行保存?