Java应用架构读书笔记(7):模块化与SOA

 由  罗俊杰 发布

模块化与SOA

对于至上而下的社会化架构,模块和包填补了从服务到代码之间的空缺。 类易于在应用内复用,但是由于类不是部署单元,无法支持应用之间的复用。

服务可以在应用之间复用,服务的调用通常基于分布式的协议(比如SOAP,HTTP,RMI/IIOP)。服务通常是远程调用,因此出于分布式请求性能的考虑一般比较大粒度。但是如果只想复用服务中特定的行为该怎么办呢? 或者copy代码,或者暴露新的服务接口。而基于模块则可以得到一种更为优雅的解决方案。

模块比服务粒度更小,而且又是一种部署单元,因此可以将这种特定的行为实现为模块,不仅支持复用,同时为我们组装应用带来了更大的灵活性。

粒度问题

如何确定合适的粒度?粒度问题涉及到复用性和可用性之间平衡的问题。

服务、模块、包、类的粒度逐次变小。 服务的行为可以分解为一组更细粒度且更易复用的模块。这样服务可以基于模块来组装,同时模块可以在服务间复用。

不同粒度层次的不同实体能够为组装、使用和复用软件实体提供良好的可扩展性。 另外我们可以从传统的层次结构来看软件系统。层次维度和实体维度可以结合起来看。 传统的层次结构包括展现层,过程层/控制层,领域层和数据访问层。

虽然具体的分层接口细节可能不同,但是一般高层通常更加粗粒度,底层更加细粒度。

结论

两个结论:

- 高层次的实体比低层次的实体应该更加粗粒度

- 服务、模块、包、类的粒度逐次变小

这只是一个一般化的指导,并不是一个普适的硬性的方法,比如一般我们不会创建一个表现层的Service,需要在具体的问题中根据实际情况应用。


YiFei 2013-07-05 22:40

俊杰同学,能否讲得详细点? 我们大脑不够用

顶(0) 踩(0) 回复
查看评论