系统集成需要注意的点:
1、减少因包装引起的调用工作量。
具体来说,就是包装时应该减少不必要的调用工作量,对原产品的调用方式和返回的结果不因包装了一层而改变,即包装器完全是一个中间人。
来看看下面这样的例子:
@Override
public CloseableHttpResponse getHttpResponse(List<String> paramsInUrl, Object paramsInBody, XxRequestEnum xxRequestEnum, String servletPath,String xauth) throws IOException {
// 通过传入url和各种参数,直接返回响应结果的方式
}
中间人不参与拆开请求,也不参与拆开结果直接返回。
2、在调用外部系统的时候,如果有无限期等待或者CAS,需要设置超时时间
简单来说就是,如果出现死循环,且死循环的跳出条件来自于外部,那么这个死循环就需要设置超时时间。
来看看下面这个例子:
while(true){
try{
Thead.sleep(1000);
}catch(Exception ex){
}
String x = getX(); // getX()是一个集成的外部产品的状态
if(x.equires("completed") || x.equires("aborted")){
break;
}else{
continue;
}
}
上面调用
@startuml
start
end
@enduml
目前idea支持比较好的有puml,通过安装plantuml plugin的方式,可以让你写的uml,直接有图可看。
4、如果有直接利用的数据来自于外部(同样适用于来自于数据库,文件等存储方式),需要判断是否合法,从而避免出现不必要的异常。
这个点其实延展于开发者对编程中需要判断数据合法性的意识。在我们的编程中,通常需要对数据进行判NULL和判空处理。看似无迹可寻的判断,其实可以理解为,当使用的数据来自外部,包括另一个class/存储/外部模块,即非本身class的时候,都需要处理。
处理的方式有很多种
1、利用assert()对结果进行判断,如果非法就会抛出异常。此时必要的是,当前你的代码必须有对异常处理的函数
2、字符串可以使用common3的StringUtils.isBlank()方法进行判断,当然,这个方法等价于对NULL和空值的判断。
3、直接对null进行判断就行了