SOA中补偿缺乏inheritance的模式
我发现基类的inheritance和概念是OOP的最强点。 但是在SOA中并不鼓励这样做。 那么,在SOA中克服这种限制的流行模式是什么? 能否请您提供解释这些模式的教程(在WCF中使用代码演示)?
注意:这不是关于SOA中可用模式的一般问题。 但它更具体到上述问题。
注意:我正在使用WCF进行SOA。
读:
-
“不要在Design中使用Abstract Base类; 但在建模/分析中“
-
如何真正实现SOA架构?
-
如何在面向服务的体系结构中处理Java多态性
-
如何加快SOA的速度?
-
什么是面向服务的架构?
-
DDD和SOA真的能很好地协同工作吗?
-
SOA和WCF设计问题:这是一个不寻常的系统设计吗?
-
设计WCF数据合同和操作
-
C#4.0中的Expando对象
无论您是否认为SOA是由SOAP,REST或消息传递实现的,服务都是以文档为中心的。 服务不是面向对象的 。
虽然多态性是OOD中强大的设计工具,但它不适用于SOA,因为SOA建模不涉及类。
我发现基类的inheritance和概念是OOP的最强点。
不要过高估计inheritance的力量 – 几乎所有的GoF模式都是为了避免错误地使用inheritance。
但是在SOA中并不鼓励这样做。
不,通常不鼓励。 为什么? 因为在SOA中,您有一项提供某些操作的服务。 服务本身由服务描述(合同/接口)定义。 在SOAP服务的情况下,在WSDL中描述了契约。 如果您需要另一个服务提供相同的操作集,而您的行为稍有不同,您将再次实现接口并将客户端定位到新服务(通过提供新的端点URL)。 因此,服务契约的inheritance“有效”,但它与数据契约的工作方式不同。
每个服务操作通常接受一些数据并返回一些数据。 这些数据再次在服务描述中描述。 在SOAP服务的情况下,数据被描述为XSD。 当您将数据从客户端发送到服务(或反向)时,必须对数据进行序列化,并且目标必须能够对它们进行反序列化(除非您希望直接使用SOAP信封,或者除非您希望使用xsd:any =无类型的XML作为传递数据)。 如果要在数据协定中使用inheritance,则必须以某种方式将有关派生合同的信息包含在服务描述中。 只有在将此信息包含到服务描述中之后,您才能告知服务使用者有关inheritance数据合同的存在(他们需要此信息才能使用派生类型)。
WCF提供了处理inheritance数据协定的能力。 您可以使用KnownTypeAttribute
, ServiceKnownTypeAttribute
属性或DataContractResolver
。 您还可以查看这篇精彩的文章了解更多详情。
在不可互操作且紧密耦合的系统(非SOA)的情况下,您还可以使用NetDataContractSerializer
,它允许您使用inheritance而没有任何限制,因为每个序列化消息包含有关反序列化所需的CLR类型的信息,而具有服务的客户端应共享数据协定程序集。
在SOA中不推荐inheritance的一个原因是因为您的代码是以模型为中心的。 您有明确定义的入口和出口模型,您的代码应在两者之间进行转换,并执行任何业务逻辑。
拥有inheritance只意味着对象之间的关系很难建模和/或随时间变化。 基本上这意味着使用POCO模型对象。
如果你想为你添加业务逻辑,可以使用mixins来模仿inheritance。
上述就是C#学习教程:SOA中补偿缺乏inheritance的模式分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/996862.html