博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Module Interface Separation 模式 [翻译]

Posted on 2008-10-06 14:38  洪博士™  阅读(223)  评论(0)    收藏  举报
  • 问题
你有一个大型的智能客户端应用程序,这个程序有许多不同团队开发的不同模块组成。一些模块需要依赖另外一些模块,例如:帐户模块需要基础模块中的日志服务,如果要访问这个日志服务,帐户模块必须先引用基础模块的程序集,每当基础模块的代码发生更改,帐户模块也必须重新编译。以下插图显示应用程序模块之间的依赖关系:
 
Figure 1 Module dependencies
  • 解决方案

这个问题可以通过将一个模块分离成两个程序集来解决:

  • 接口程序集
  • 模块实现程序集

接口程序集需要包含以下类型的公共元素:

  • 服务接口(Service Interfaces)
  • 命令(Commands)
  • 常量(Constants)
  • 命令名称(Command Names)
  • 事件主题名称(Event Topic Names)
  • 界面扩展组件名称(UI Extension Site Names)
  • 工作区名称(Workspace Names)
  • 业务实体(Business Entities)

模块实现程序集包含模块的具体实现,这样你就可以更改模块的实现而无须重新编译其他具有依赖的模块,那些依赖的模块仅在接口程序集改变时才需要重新编译。以下插图表示模块和接口程序集之间的依赖关系:

 

Figure 2 Separation of interface and implementation for modules

  • 示例

银行客户端参考实现项目中所有模块都是按照以上模式设计的。我们可以通过查看Infrastructure.Interface程序集以及相关的Infrastructure.Module程序集来了解其实现方式。