Business objects 好/坏的业务对象设计?

Business objects 好/坏的业务对象设计?,business-objects,Business Objects,我继承了一套业务对象,它们工作得相当好。看起来它是基于CSLA框架的,但是有一个非常恼人的问题。当业务对象进行加载时,它会抛出一个异常。因此,如果它试图加载数据库中不可用的数据,则会引发异常。这是一个好的设计吗?IMHO,例外情况是指例外情况——丢失的数据通常不例外,除非它位于主键或其他非空字段上。IMHO,例外情况是指例外情况——丢失的数据通常不例外,除非它位于主键上,或其他非空字段。这取决于丢失的数据对应用程序的影响。如果没有这些数据,应用程序无法合理地继续,那么这是一个例外情况,例外情况是

我继承了一套业务对象,它们工作得相当好。看起来它是基于CSLA框架的,但是有一个非常恼人的问题。当业务对象进行加载时,它会抛出一个异常。因此,如果它试图加载数据库中不可用的数据,则会引发异常。这是一个好的设计吗?

IMHO,例外情况是指例外情况——丢失的数据通常不例外,除非它位于主键或其他非空字段上。

IMHO,例外情况是指例外情况——丢失的数据通常不例外,除非它位于主键上,或其他非空字段。

这取决于丢失的数据对应用程序的影响。如果没有这些数据,应用程序无法合理地继续,那么这是一个例外情况,例外情况是有保证的。如果数据丢失是相对正常的(尤其是如果调用方希望处理异常并继续),那么使用异常是一种糟糕的设计。

这取决于丢失的数据对应用程序的影响。如果没有这些数据,应用程序无法合理地继续,那么这是一个例外情况,例外情况是有保证的。如果数据丢失是相对正常的(尤其是如果希望调用方处理异常并继续),那么这就是异常的使用,这是一个糟糕的设计。

最近我与一位同事就这个话题进行了辩论

我的断言是,在一种情况下,您希望执行X的方法不执行X,这正是异常的定义

你选择如何处理这个例外是另一回事。您可以选择在代码中内部处理该异常,也可以选择将该异常的处理推迟到代码中的更高级别

我同意,如果在异常发生的时间和地点处理异常是有意义的,那么处理异常总是比将其延迟到更高级别的代码要好

也就是说,我还相信,在较低级别的代码中,将这些异常的处理推迟到较高级别的代码中是有意义的。这为更高级别的代码提供了处理这些情况的更大的灵活性,同时也为代码提供了更高级别的洞察

例如,如果您从数据库检索数据并构建一个对象以在应用程序中使用,您可能会遇到以下几种情况:

  • 按预期返回一个对象
  • 无法连接到数据库
  • 找不到您希望找到的数据
  • 您可以通过简单地返回空对象或null来处理异常2和3,但是更高级别的代码不知道它请求的信息为什么没有返回。这将需要一些次要的模式来通知更高级别的发生了什么

    或者,我断言您可以创建一个带有消息字段的自定义异常,在该字段中传回发生的异常事件。强制更高级别的代码在其认为合适的情况下处理这些情况

    在我看来,后者可以更灵活,但确实需要更高级别的代码来知道它需要处理异常,这些异常应该有很好的文档记录,以便方法可以抛出某些异常


    注:我不是专家,我也不自称是专家,我是在与我讨论这个话题的同事的鼓励下分享我的观点。

    最近我与一位同事就这个话题进行了辩论

    我的断言是,在一种情况下,您希望执行X的方法不执行X,这正是异常的定义

    你选择如何处理这个例外是另一回事。您可以选择在代码中内部处理该异常,也可以选择将该异常的处理推迟到代码中的更高级别

    我同意,如果在异常发生的时间和地点处理异常是有意义的,那么处理异常总是比将其延迟到更高级别的代码要好

    也就是说,我还相信,在较低级别的代码中,将这些异常的处理推迟到较高级别的代码中是有意义的。这为更高级别的代码提供了处理这些情况的更大的灵活性,同时也为代码提供了更高级别的洞察

    例如,如果您从数据库检索数据并构建一个对象以在应用程序中使用,您可能会遇到以下几种情况:

  • 按预期返回一个对象
  • 无法连接到数据库
  • 找不到您希望找到的数据
  • 您可以通过简单地返回空对象或null来处理异常2和3,但是更高级别的代码不知道它请求的信息为什么没有返回。这将需要一些次要的模式来通知更高级别的发生了什么

    或者,我断言您可以创建一个带有消息字段的自定义异常,在该字段中传回发生的异常事件。强制更高级别的代码在其认为合适的情况下处理这些情况

    在我看来,后者可以更灵活,但确实需要更高级别的代码来知道它需要处理异常,这些异常应该有很好的文档记录,以便方法可以抛出某些异常

    注:我不是专家,我不自称是专家,我是在与我讨论这个话题的同行的鼓励下分享我的观点的