【发布时间】:2011-09-18 16:14:05
【问题描述】:
作为一名顾问,我负责为外部公司设计应用程序的架构。此应用程序的要求相当简单,只需一个基本的 Web 应用程序、一两个传入 Web 服务和几个传出文档通道即可轻松解决整个问题。
由于两个非功能性需求,事情变得更加复杂:
- 上述公司要求所有内部应用程序都必须通过企业门户提供(为了 UI、安全性和技术统一性)
- 该公司要求所有应用程序都使用 SOA 原则构建,以便最终可以在 ESB 上发布服务并重用。
架构可以轻松适应门户要求。演示文稿将使用 portlet 构建并集成到门户主题中,并且将重用门户安全性。没什么大不了的。
SOA 需求是另一回事。可重用服务尚未确定。在我看来,有几个选择:
- 业务逻辑部署在门户上并与表示层位于同一位置。没有服务公开,此决定被推迟。
- 业务逻辑部署在单独的服务器上。设计了一个 API,所有服务都使用封闭协议(例如 RMI 或 Hessian)公开。对于最终需要重用的服务,可以在这些服务之上添加一个 SOAP API。
- 业务逻辑部署在单独的服务器上。设计了一个 SOAP API,并使用此机制公开所有服务。
我想避免构建过于复杂的东西。我经历过业务代表、远程外观和 DTO 的项目,其中每一次更改都需要修改多个层。然而,感觉好像这个 SOA 要求强行将我推向了那个方向。
更新:我想得越多,我就越意识到设计远程 API 的需要会产生复杂性。当然这需要为服务创建接口,但是交换的实体呢?要么我采用 DTO 方式并最终得到两个并行对象层次结构(一个用于 DTO,一个用于实际实体),要么我采用接口方式并为需要跨服务器传输的所有实体声明接口。无论哪种方式,这都会带来一系列全新的问题,我们最终将编写大量样板代码。我以为我们已经度过了那个时代......
最好(或最差)的设计方法是什么?
谢谢大家。
【问题讨论】:
标签: architecture soa portal