仅使用PHP setter进行类型安全是否有意义?

时间:2013-06-03 12:14:16

标签: php mapper

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

我的表单过滤器非常全面。如果错误类型或值的属性潜行,我相信我可以在映射器中拾取它们。最糟糕的情况是数据库抛出了一个我可以捕获的异常。

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

3 个答案:

答案 0 :(得分:1)

作为最佳实践,您应该在到达数据库之前始终“抓住您能做的”。虽然它似乎似乎好像往返不是一件大事,但它们很昂贵。必须在服务器上创建对象,管理应用程序池资源等等。在你到达数据库之前,你可以做所有的验证,虽然很繁琐

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

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

答案 1 :(得分:0)

我认为没有好的答案。

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

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

接下来,如果您创建某种api并再次使用域对象,请检查值。

结论取决于您喜欢的代码风格。因此,您可以实现getter和settets,或者直接指向值。

虽然我建议至少使用getter和setter来处理这种情况,你需要更改值handeld的方式(例如,数组需要成为对象)

答案 2 :(得分:0)

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

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

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