[英]WCF TransactionScope in Client or Service
可以说我需要调用多个服务,这些服务在同一事务中插入一些带有EF的记录,用于插入Person
和Unit
。
我不确定是否应该创建一个名为AddPersonAndUnit
的新操作合同并在该方法中使用TransactionScope
并从客户端调用它,或者不创建任何其他方法而仅在客户端(ASP.NET MVC客户端)中使用TransactionScope
,并且调用已经存在的AddPerson
和AddUnit
。
对于单一职责并将所有业务逻辑移入服务层,我认为在服务层中定义一个额外的方法并从客户端调用它似乎是一个更好的选择,但另一方面,仅从客户端调用这些多个方法则需要较少的工作。
您如何看待良好的设计选择? 您认为处理客户的交易是否“不好”? 为此创建一个新方法是否值得?
根据您的问题,您有两个项目( ASP.NET MVC
和WCF
),并且您要确保Person
和Unit
是通过事务进行插入/更新的。
以这两个为输入
让我们对选项1进行快速分析( 在客户端代码(代理类)中使用TransactionScope )
需要的努力
OperationContract
和ServiceBehavior
)以支持交易 OperationBehavior
)支持事务 binding
配置 binding
配置 优点(要求赔偿) :
缺点 :
由于应用程序代码( MVC
)和服务代码( WCF
) 均由您完全控制 ,因此可以确保在插入/更新Person
和Unit
时始终使用事务。 但是,我宁愿将其作为black-box
服务,以便我可以将其公开给其他3rd客户端或将该服务提供给其他开发人员使用, 而不必担心数据不一致 (如果他们忘记/故意跳过了交易该怎么办?) 。 即使您可以强制客户端在调用Web服务时始终使用事务(通过使用TransactionFlowOption.Mandatory
选项),但我认为良好的做法是仅公开最少的服务供客户端使用
单一责任也是另一个问题
Person
和Unit
您都需要一遍又一遍地复制代码) 希望能帮助到你,
对不起英语不好
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.