关注点分离(Separation of concerns,SOC
)
关注点是指对软件工程有意义的、小的、可管理的、可描述的软件组成部分,一个关注点通常只同一个特定概念或目标相关联。关注点分离(Separation of concerns,SOC)是指标识、封装和操纵关注点的能力,是处理复杂性的一个原则。由于关注点混杂在一起会导致复杂性大大增加,所以能够把不同的关注点分离开来,分别处理就成为了处理复杂性的一个原则、一种方法。关注点分离是面向方面编程(AOP)和面向方面软件开发(AOSD)的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用,业务逻辑同特定领域问题的关系通过方面来封装和维护,这样原本分散在在整个应用程序中的变动就可以很好的管理起来。
关注点分离、EssUP和SOA
关注点分离是SOA的核心原则,这意味着EssUP和SOA在理论基础方面具有相同的方法论。当我们考察SOA时,就可以发现SOA的许多原则可以应用到EssUP中,简单归纳如下:
SOA
的一般原则
|
在
EssUP
中的应用
|
服务是可复用的
|
重用最佳实践
|
服务是松散耦合的
|
实践相互独立
|
服务抽象底层逻辑
|
实践具有相同的简化的高层视图,每个实践都是从目的、制件、关键能力和工作任务出发的
|
服务是可组合的
|
实践可以相互组合
|
服务是自治的
|
每个实践可以单独使用,不依赖于其他实践
|
服务是可发现的
|
智能代理技术
|
服务的兼容性是基于策略的
|
实践的替换基于过程对实践的应用策略
|
面向文档
|
Card和Card Board
|
服务共享一个正式的契约
|
?
|
SOA
已经成了构建企业
IT
基础设施的一种架构思想,其根本目的是为了实现企业应用的灵活性。软件开发是人类智力高度密集的行业,开发过程管理始终是难度最高的管理实践之一,笨重繁琐的过程已经证明是行不通的,而敏捷方法又过于依赖专家级技术人员。
EssUP
为我们提供了一个解决问题的新视角,那就是在软件开发过程管理领域引入
SOA
的观念。我们可以使用
SOA
领域日渐成熟的原则、方法、实践甚至是工具来不断完善我们的
EssUP
工具箱,从而达到我们梦寐以求的灵活性,同时又不会失去过程的可控性。
关注点分离、EssUP和AOP
EssUP是关注点分离思想进入软件开发过程领域的一种实践,在面向方面编程(AOP)中关注点分离则是其核心概念,这使两者具有了一定的可比性。
下表是
EssUP
和AOP
中相关概念的对照。
EssUP
中的实践(Practice
)
|
AOP
中的方面(Aspect
)
|
分离各种实践是为了更好的组织这些实践
|
分离Aspect为了更好的组织这些Aspect
|
实践独立于另一个实践
|
Aspect独立于另一个Aspect
|
实践可以相互组合
|
Aspect可以相互组合
|
各种不同的实践可以看作不同的方面,大多彼此独立,比如TDD、结对编程、重构、软件构架、团队建设和迭代等等,实践跨越(横切)开发过程的整个生命周期。这就是说开发过程的每个阶段都有可能会涉及到相同的实践。
|
Aspect横切业务过程
|
实践需要进行分离
|
Aspect需要进行识别
|
并不需要所有的实践
|
Aspect不是必须的
|
其它实践来扩展核心实践
|
可以通过一个Aspect来扩展另外一个Aspect
|
相同作用的实践也可以替换,比如:Use Case和User Story。
|
相同作用的Aspect可以相互替换
|
可以开发新的实践,来扩展开发过程或者扩展某个实践
|
可以写新的Aspect
|
过程中使用实践,可以看作是很多实践的叠加效果
|
程序中使用Aspect,可以看作是很多切片不断叠加的效果
|
在ESSUP里有两个方向的分离,一个是Card Board这个方向的,从过程的结构方面入手进行方面的分离,每个Card Board可以看做是一个方面,需要使用相应的Cards去填充。另一个是Card这个方向的,从过程中的具体步骤入手进行方面的分离,每个Card也可以看作是能够相互独立的一个方面,这些方面成了过程的基础组成单元。
关注点分离和项目管理
分离关注点有助于项目管理中的分工,提高工作效率。“各司其职,分工合作”才是项目管理中最更要的理念。在软件工程中将一个大的系统分离成小的模块,不断地完善其功能,最后慢慢再整合成一个系统,如此才能完成客户的要求。一个Process是一个工作的模型,定义了“什么人在什么时间做什么事情”,这正是分解一个项目的关键。
从项目管理看SOA
SOA所处理的技术都没有新的知识。从技术方面来看,SOA并没有引入新的技术理念;软件工程角度来看,SOA是一个软件应用的过程;从管理的角度来看,SOA只是用另外一种方式来诠释企业应用。企业使用SOA的目的大多一样(比如降低成本,加速服务开发等),但是应对的环境却千变万化。
“质量不是
100%
!”,软件做到
60%
的程度即可,再做多就是了增加了开发成本。只有控制好开发成本与周期,才能做出一个好的软件产品。
SOA
的作用就是让我们实现成品优,品质好,成本低的开发;在开发的过程中,要记得把必要的东西优先完成。