软件架构设计案例总结。
前言
优秀的软件系统离不开好的架构设计,但很多开发者关注架构设计时,往往停留在概念层面,缺乏对实际案例的理解,同时概念与实践容易脱离。为此,笔者将开发过程中遇到的一些架构设计的案例作相应总结。可能许多案例非常小,但是积少成多,到了一定的数目后,自然会对架构设计有不同的理解。本文的案例均以Java代码为载体来进行描述。
是否应该传递对象?
在模块化的软件系统中,少不了通过接口传递对象。常见的设计就是通过接口方法的返回值获得对象。例如:
Data getData(String para);
这是一种显而易见的设计。
但实际上,可以有不同的实现,例如
void getData(Data data, String para);
两者的区别在于:
- 前者通过返回值获取期望的对象,后者初始化对象后传递给调用方修改对象
- 前者由被调用方构造对象,后者由调用方构造对象
- 前者在调用方法时,对结果对象一无所知。后者在调用方法前,可以知道结果对象的部分情况。
- 前者无法预处理结果对象,后者可以预处理对象
- 前者是同步阻塞型,后者可以做异步处理
两者的适用场景可以根据它们的区别点来选择。同时,对于前者常见的例子非常多,此处暂举一个后者的例子作为案例。在模块化的安卓应用中,可以通过接口获得视图或布局View。使用后者作为设计方案的例子为:
void process(MyView myView, String para)
其布局可以为
<LinearLayout>
<MyView>
// xxx
</MyView>
</LinearLayout>
即调用方可以在自己的布局中初始化期望的View,并且在使用接口时,将该View的对象传递给其他模块处理,其他模块对该View对象进行处理,从而更改的期望View的外观和行为。
网友评论