软件架构的运行时恢复与操作
立即解锁
发布时间: 2025-08-25 01:51:53 阅读量: 1 订阅数: 10 

# 软件架构的运行时恢复与操作
## 1. 设计时的软件架构
为了更清晰地解释相关方法,以一个电子商务系统(eShop)为例。在这个系统中,客户可以通过互联网购买计算机产品。系统中的各个组件和功能如下:
- OpShoppingCart 为客户端提供图形用户界面(GUI),客户端可以通过它访问由 Customer 表示的账户,浏览和购买由 Product 表示的产品,并通过 OpOrder 查看、更改或删除订单。
- ShoppingCartLineItem 表示客户偏好的一种计算机产品及其数量。
- ShoppingCart 负责创建、修改和删除一组 ShoppingCartLineItem。
- OrderLineItem 表示购买的一种产品的类型和数量,Order 表示一次购买的所有 OrderLineItem。
在设计时的软件架构中,组件和连接器通常被视为原子或黑盒实体。软件架构的更改可以分为组件和连接器的添加、移除、替换和适配。例如,OpShoppingCart 可能会被替换以提供更好的 GUI 来吸引客户,或者进行适配以允许更多客户同时访问。还可以添加支持 SOAP 的新连接器,使 eShop 能够通过 Web 服务与其他电子商务系统集成,并且可以对 OpShoppingCart 和 Customer 之间的连接器进行适配,以安全的方式传输消息,如使用 SSL。
## 2. 运行时的软件架构
在一些组件框架(如 CORBA/CCM 和 J2EE/EJB)中,组件和连接器作为复合或白盒实体进行实例化和执行。以 EJB 为例,其合同由 Home 接口和 Component 接口组成。Home 接口定义了与特定 EJB 实例无关的方法,如创建、移除和查找 EJB;Component 接口定义了指定组件责任或功能的业务方法。
以下是 Customer EJB 的合同、实现和约束的代码示例:
```java
// One part of contract of Customer EJB.
interface CustomerHome extends EJBHome {
Customer create(String name);
Customer findByPrimaryKey(String key);
Collection findAllCustomers();
...
}
// Another part of contract of Customer EJB.
interface Customer extends EJBObject {
String getAddress();
void setAddress();
...
}
// Implementation of Customer EJB.
class CustomerBean implements EntityBean {
Customer ejbCreate(String name) { ... }
Customer ejbFindByPrimaryKey(String key) { ... }
String getAddress() { ... }
void setAddress() { ... }
...
}
// Constraints on Customer EJB in deployment description.
...
<cmp-field>customerID</cmp-field>
<prim-key-class>java.lang.String</prim-key-class>
<cmp-version>2.x</cmp-version>
...
<method-permission>
<role-name>administrator</role-name>
<method>
<ejb-name>Order</ejb-name>
<method-name>findAllCustomers</method-name>
</method>
</method-permission>
...
```
J2EE 应用服务器需要使合同、实现和约束协同工作,同时保持它们的分离。在组件框架的视角下,设计阶段的黑盒组件在运行时变成了白盒组件,连接器也变成了白盒,由客户端代理(stub)、服务器端代理(skeleton)和符合标准互操作性协议(如 IIOP、SOAP 和 JRMP)的通信基础设施组成。这些运行时实体可以独立观察和更改,例如,由于数据库模式的更改,可以替换 Customer 的实现,而不会影响其外部视图。但在传统软件架构视图中进行此类更改可能更复杂和昂贵。
## 3. 运行时恢复的软件架构描述
现有的架构描述语言(ADL)主要关注软件开发,不能直接应用于恢复的软件架构,需要进行扩展。以 ABC/ADL 为例,其扩展元素包括:
-
0
0
复制全文
相关推荐










