我的应用程序有一个设计问题。
我有一个产品和一个类别。两者都必须有身份证。
类别可以有任何正整数作为 ID。(-> 身份等级)
产品必须有一个介于 8 和 13 个密码之间的正整数作为 ID。(-> Ean 级)
因为这是这些类做的唯一事情(创建一个 id)和一个带有正确检查的 getter/setter。
为了减少代码(DRY),我让 Ean 从 Id 继承。但这不会违反 Liskov (LSP) 吗?
我的问题:
- 我的 LSP 推理是否正确?如果是:
- 我应该通过创建界面来解决它吗?(似乎是重复的代码)还是有其他解决方案?
提前致谢!
标识符.java
public class Identifier {
private Long id = 1000000000000L;
public Identifier(){
}
public Identifier(Long id){
setId(id);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
Ean.java
public class Ean extends Identifier {
private final static int MIN_AMOUNT_OF_CIPHERS = 8;
private final static int MAX_AMOUNT_OF_CIPHERS = 13;
private final static String ERROR_EAN_LENGTH = "err_ean_length";
public Ean() {
}
public Ean(Long ean) throws DomainException {
setEan(ean);
}
public Long getEan() {
return getId();
}
public void setEan(Long ean) throws DomainException {
if (String.valueOf(ean).length() < MIN_AMOUNT_OF_CIPHERS
|| String.valueOf(ean).length() > MAX_AMOUNT_OF_CIPHERS) {
throw new DomainException(ERROR_EAN_LENGTH);
}
setId(ean);
}