我试图编写一个供外部用户使用的库,但我坚持一些基本的设计决策。
我正在编写一个简单的POJO类,其中将包含有关OAuth2令牌的一些信息。
本课程将需要满足以下条件:
这是我到目前为止所拥有的:
public TokenInformation(String token, Date expirationDate, String refreshToken) {
Objects.requireNonNull(token, "token parameter cannot be null.");
this.token = token;
if ((expirationDate != null) && (refreshToken != null)) {
this.expiresIn = expiresIn;
this.refreshToken = refreshToken;
isPermanentToken = false;
} else if ((expirationDate == null) && (refreshToken == null)) {
this.expiresIn = null;
this.refreshToken = null;
isPermanentToken = true;
} else {
// throw some exception here
}
}
老实说,我对代码的外观并不完全满意。
但是我确实有以下想法:
我认为第二个想法可能是最好的方法。例如,我想不出任何要求我们传递null的Java API,这可能暗示我粘贴的代码是个坏主意。另外,Java充分利用了工厂方法,因此对于我的库用户而言,这将不是一个陌生的模式。
不过,我希望别人的意见。因此,如果您需要其他任何信息,请告诉我。
我希望将永久令牌和临时令牌的行为封装到各自的域中,以便您的库中的任何用户都清楚知道要实例化哪种令牌
我认为建议的课程:
/**
* The base class encapsulates the behavior of generic token
*/
public class AbstractToken {
protected String token;
// other properties that exist very closely with token
public String getToken() {
return token;
}
}
永久令牌域
/**
* The domain encapsulates the behaviour of Permanent token - token that never expires
*/
public class PermanentToken extends AbstractToken {
// more attributes that makes general token as Parmament token
/**
* Instantiates a new Permanent token - this token never expires
*
* @param token the token
*/
public PermanentToken(String token) {
this.token = token;
}
}
临时令牌的域:
/**
* The domain for Temporary token.
*/
public class TemporaryToken extends AbstractToken {
private Date expirationDate;
private String refreshToken;
// more attributes that makes general token as temporary token
/**
* Instantiates a new Temporary token with token expiry date and refresh token
*
* @param token the token
* @param expirationDate the expiration date
* @param refreshToken the refresh token
*/
public TemporaryToken(String token, Date expirationDate, String refreshToken) {
this.token = token;
this.expirationDate = expirationDate;
this.refreshToken = refreshToken;
}
}
现在,您的图书馆用户清楚地知道他/她想实例化和使用哪种令牌。
附言:我想您将能够为您的域名保留更好的名称,并且可以为您的图书馆提供更深入的业务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句