4

我有一堆域对象,我正在使用重载来获取和设置属性。

我的表单过滤器很全面。如果错误类型或值的属性偷偷溜进来,我相信我可以在映射器中找到它们。最坏的情况是数据库抛出一个我可以捕获的异常。

在这种情况下,我应该担心域对象中的 getter 和 setter 吗?

4

3 回答 3

1

作为最佳实践,您应该始终在访问数据库之前“抓住一切”。尽管往返似乎没什么大不了的,但它们很昂贵。必须在服务器上创建对象、管理应用程序池资源等等。在您访问数据库之前,尽您所能进行所有验证,尽管这很乏味。

您依赖数据库抛出异常的原因是通过其他形式的访问(例如导入脚本)确保其完整性,而不是为您的应用程序利用它(它能够优雅地捕获和处理它们)。

构建getandset操作的最后一个好处是您可以完全封装这些边界检查,这样您只需编写一次代码,您就朝着正确的方向前进!

于 2013-06-03T12:27:42.193 回答
0

定义显式的“getter 和 setter”将允许您为您的域模型实现正确的封装。

从设置的角度来看,这将是复杂值的类型检查。然后,您可以执行适用于域模型上下文的任何验证。

当域模型被持久化时,这个“验证”实际上是为了确保值被正确存储。映射器唯一需要考虑的是将简单(标量)值转换为正确的格式(即日期等)。这些操作往往是特定于数据库的,可能更适合映射器。

于 2013-06-03T12:28:51.007 回答
0

好吧,我认为没有好的答案。

如果你这样做,你可以 100% 确定返回的值是 x 类型。否则,您需要依靠数据层来获得正确的东西。

我检查了这些值,但这主要是因为我喜欢防御性编程方法(范围之外的一切都是邪恶的,不应该被信任)。域对象超出了映射器的范围,所以你不确定你得到了什么。

接下来,如果您制作某种 api 并再次使用域对象超出范围,请检查值。

结论这取决于你喜欢的代码风格。所以你可以实现 getter 和 settets 或者直接指向值。

尽管我建议至少在需要更改值的处理方式的情况下使用 getter 和 setter(例如,数组需要成为对象)

于 2013-06-03T12:26:24.467 回答