我正在编写一个应用程序,我很困惑如何在业务层和服务层之间进行通信。让我通过举例说明我的观点:
createStusdentRecord是服务层中的方法,我从业务层调用它。现在方法1:创建不同的自定义异常并抛出一些数据丢失等,并在成功返回studentid时,让业务层处理这些异常。
方法2:创建一个类SMD(状态消息和数据)并处理服务层中的所有异常。将此SMD返回到业务层,在业务层中没有异常处理。
哪种方法更好,为什么?
当我们公开网络服务时应该采取什么措施?
答案 0 :(得分:2)
我会选择方法1.假设呼叫者可以处理这些真正特殊的条件。
我喜欢例外,因为有一种方法可以找出失败的原因。隐藏所有错误或仅返回成功/失败的布尔值是一种不好的做法。
关键是尽量隐藏尽可能多的内部内容以隐藏实现细节以及其他层不知道(或想知道)的内容,但如果存在问题则要用足够的信息来平衡
Student s = dao.createStudent(...)
如果给定的参数无效,你会抛出异常吗?也许取决于他们为什么无效。对于诸如“具有这些参数的学生已存在”之类的概念进行自定义异常也许是一个好主意。但是,像“参数无效”这样的东西可能是使用JDK内置异常之一的更好选择,例如“IllegalArgumentException”。
此外,我会将所有自定义异常子类化为父“DaoException”,因此只关心成功/失败捕获的客户端代码会捕获父级,但是需要更细粒度控制的东西总能捕获子类。