初始化的设计
例子
class A{
private static A INSTANCE = new A();
public A getInstance(){return INSTANCE};
private A(){
initData();
}
private void initData(){remotecall()};
}
这个class的设计有一个API. getInstance
这个API的含义是:
1.单例
2.如果第一次调用会触发数据的初始化,rpc调用加载数据.
这个设计暗含一个潜规则:使用方在使用的时候, 要在初始化的地方做一次getInstance调用.
如果没有初始化, 在使用的时候直接getInstance,会导致第一次使用的时候影响性能.
改进
API的设计不要暗含潜规则, 接口设计要明确, get接口要幂等, 每次调用都是一样的效应.
而不能是第一次调用和后续的调用有任何差别.
以上的例子建议修改为两个接口.
1.getInstantce();
2.Init();
使用方通过接口定义就能清楚的指导接口使用的场景和预想到接口调用的后果.
而不是非要阅读接口方的源代码或者通过潜规则的传递.