struts Action 类和业务服务层

标签 struts coupling

我对处理在服务层上完成的“业务验证”有疑问。下面的代码显示了一个典型的账户资金转账示例,它验证了足够的资金,转账金额小于定义的限制。

在这个例子中,调用者必须处理和捕获 Action 类中定义的异常,并使用相应的 ActionError 来显示错误消息。

对所有业务验证使用异常是“必须的”吗?

如果我决定不为此使用异常,我将不得不在业务层中定义相应的 ActionError(这违反了某种意义上的耦合/内聚)规则。

应该如何处理由服务层传播回 Action 类的消息?

public void transfer(String fromAccount, String toAccount, double amount) throws InsufficientFundsException, TransferLimitException, FactoryException { 
    try { 
        Account from = getAccountHome().findByPrimaryKey( 
new AccountKey(fromAccount)); 
        Account to = getAccountHome().findByPrimaryKey( 
new AccountKey(toAccount)); 
        if (from.getBalance() < amount) 
            throw new InsufficientFundsException(); // Add action errors

        if (from.getTransferLimit() > amount) 
            throw new TransferLimitException();  // Add action errors
        to.deposit(amount); 
        from.withdraw(amount); 
    } catch (Exception e) { 
        throw new FactoryException( 
"cannot perform transfer. Nested exception is " + e); 
    } 
}

最佳答案

您的业​​务应该在模型中处理,您的业务逻辑中遇到的任何问题都应该传播给调用者,在这种情况下是 Struts Action 类。

但是您不想将 Struts 类(Action、ActionForm、ActionError、ActionMessage 等)与模型耦合,因此您基本上有两种方法可以通知调用者任何问题:

  • 返回一些调用者可以检查的错误代码;
  • 抛出一些调用者可以捕获的异常。

  • 更喜欢使用异常(exception) 因为无论在执行链中有多深,它们都可以从业务层内部的任何地方被抛出到顶层。这使业务代码保持干净,因为您不必像第一种方法那样冒泡错误代码。

    然后 Action 类将捕获异常,该类将它们转换为 ActionError 对象以显示在 View 中。只要确保你不要做得太过分,就会结束 throwing the kitchen sink否则你的 Action 类会被过多的 try-catch 块挤满。此外,您可以让异常传播并创建 exception handler某种捕获从下面抛出的所有异常并根据异常类型重定向到适当的 View 。

    关于struts Action 类和业务服务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063090/

    相关文章:

    java - 当一个类只调用另一个类有很多方法的一个方法时,如何降低耦合?

    c# - 单元测试 : how to test methods with a lot of underlying objects and business logic

    java - 哪个模式在java : passing objects to a method or using composition?中耦合度较低

    ruby - 用于配对两个数组元素的快速 Ruby 方法/算法

    java - Tiles1 - 将属性传递给 jsp 部分

    java - 转换 String BigDecimal 时出错

    java - PrettyFaces 不适用于 Struts 2

    java - 将 Struts 1 迁移到 Struts 2

    java - struts的ActionForm和使用trim()

    refactoring - 删除紧密耦合的代码