考虑业务需求发生变化的情况下,波约斯/模型或域驱动对象的本质是什么



我被告知,这大块代码是一个非常讨厌的反图案。

  @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个域对象。

最新更新