3

我正在阅读面向模式的软件架构第 2 卷中并发和网络软件的挑战。

服务访问通常涉及对 OMG 事件服务等可重用组件调用远程操作。支持服务和应用程序的静态和动态演化是网络化软件系统的另一个关键挑战。

进化可以通过以下方式发生

组件服务角色之间的接口和连接可以改变,通常在运行时,新的服务角色可以被实现和安装到现有组件中。

确定如何访问“按需”配置到系统中并且在系统最初设计时其实现未知的服务更具挑战性。这里的设计挑战是双重的。

  1. 首先,应用程序必须导出新服务,即使它可能不知道它们的详细接口。

  2. 其次,应用程序必须透明且稳健地将这些服务集成到它自己的控制流和处理序列中,即使在运行时也是如此。

我需要您通过回答以下问题来帮助理解上述文字。

  1. 作者所说的“组件服务角色之间的接口和连接性可以改变,通常在运行时”是什么意思?要求用容易理解的例子来解释。

  2. 作者所说的两点是什么意思,上面提到了按需挑战。要求对以上两点进行阐述。

感谢您的时间和帮助。

4

1 回答 1

0

1.作者所说的“组件服务角色之间的接口和连接性可以改变,通常在运行时”是什么意思?

我不确定。接口随着时间的推移而改变,因为:

  • 可以采用新的技术标准——比如从 SOAP 到 REST,或者从 XML 到 JSON,但这会在部署过程中慢慢发生——对我来说,“运行时”是事物运行的内存空间,而我没有看到接口快速改变自己 - 否则怎么会有人与它们集成?
  • API 或接口契约本身会发生变化以满足业务需求。

2.作者上面提到的按需挑战的两点是什么意思。

嗯,好的设计模式往往能很好地生存下来(它们永远不会改变,因为它们永远不会被破坏——就像 SOLID 一样)。我认为您所指的这本书是在 2000 年写的 - 从那时起发生了很多变化,所以虽然这种模式可能会继续存在,但我们现在描述它的方式可能已经改变(即他所说的“导出新服务”的意思是开放的)解释)...

1.首先,应用程序必须导出新服务,即使它可能不知道它们的详细接口。

关注点分离(基本的面向对象的东西),你的应用程序的所有部分都不(不应该)本质上知道其他部分在内部做什么;同样,只要有人(包括外部系统)满足接口,那么谁在乎它在内部是如何做到的。

2.其次,应用程序必须透明且稳健地将这些服务集成到它自己的控制流和处理序列中,即使在运行时也是如此。

我认为这意味着程序永远不应该中断,它应该始终编译,如果应用程序正在动态创建和执行代码(比如基于用户输入),那么需要就地检查,以便动态代码不会也不要破坏应用程序。

于 2013-09-18T05:39:01.033 回答