我被告知,这大块代码是一个非常讨厌的反图案。
@SuppressWarnings("unchecked")
private static Map<String, Object> getArgs(Object obj) {
return new HashMap<>((Map<String, Object>) obj);
}
public void buildAndUpdateCustomer(List<Object> list) {
for (Object obj : list) {
Map<String, Object> args = getArgs(obj);
daoProvider.updateCustomerName(args);
daoProvider.updateAgingMia(args);
}
}
public void buildAndUpdateTax(List<Object> list) {
for (Object obj : list) {
Map<String, Object> args = getArgs(obj);
daoProvider.updateTaxAmount(args);
}
}
public void buildAndUpdateLedgerBal(List<Object> list) {
for (Object obj : list) {
Map<String, Object> args = getArgs(obj);
daoProvider.updateLedgerBalance(args);
}
}
一个论点是因为:
- 它删除了编译器提供的所有类型安全性,甚至删除名称检查。
- 包含不必要的演员
(Map<String,Object>) obj
- 很难理解方法是通过其签名做的,因为方法参数是对象类型的。
List<Object> list
我的 List<Object> list
可能是发票税金额,客户列表,账本余额和cetera的清单...可以像这样重写。
public void buildAndUpdateCustomer(List<Customer> list) {...}
public void buildAndUpdateTax(List<Tax> list) {..}
public void buildAndUpdateLedgerBal(List<Ledger> list) {..}
这意味着必须为每种方法创建客户,税收和分类帐POJO/ENTITY/域对象。我已经有100多种buildAndUpdate()
来更新和做不同的事情,我是否必须创建100个POJO/ENTITY/域对象?也许这是不好的做法,但我觉得不得不在整个代码库中添加课程并杀死可维护性。
您基本上问为什么不使用Map<String, Object>
代替域对象。
我无法想象太多的东西比Map<String, Object>
更糟糕。Heara只是一些原因:
- 作为开发人员,您将不知道允许哪些字段或必须是强制性的,除非您挖掘源代码。
- 对于挖掘源代码,由于仅仅是
Map<String, Object>
,因此很难知道实际使用该伪级的位置。与普通类的"查找参考"不同。 - 您的域对象可能具有其他实用方法,例如为数据提供更容易的访问。
- 您无法在
Map<String, Object>
中执行规则。基本上,您可以从业务逻辑的角度创建一个无效的实例。 - 重构。想象一下,您需要重命名字段。祝您好运找到所有这些领域的地方。
所以,是的,我一定会创建一个100个域对象。