15

我正在写一个网络服务。

通常输入是 XML 文档,输出是 XML 或 JSON。

该应用程序使用 MVC 模式,具有不同的层

  • 控制器:接收 XML 并提供响应 (XML/JSON)
  • 服务:业务逻辑、事务
  • DAO:查询数据源(一个数据库或另一个 Web 服务)

我的理解是基本验证(即:针对 XSD 的 XML)应该尽快在 Controller 层完成。

之后,我仍然需要进行额外的验证,其中一些验证是基本的,例如

  • 日期格式必须正确
  • 用户名不能超过 X 个字符(可能还要在 XSD 上执行?)

据我了解,在将 XML 解组为 Java 对象时应该进行此类基本验证。这也会发生在控制器层(尽管验证本身将由 XML 被解组到的 Java 对象完成)

最后我面对更“复杂”的验证示例

  • 日期不应早于 1950 年(只是一个随机示例)
  • 如果 A 值大于 B,则 C 值不应超过 D

这种“复杂”的验证似乎是 javax.validation.Validator 接口的完美候选者。并且感觉它们应该在控制器层中完成。

问题是

  1. 这种方法正确吗?我还应该在其他层验证某些东西吗?
  2. 我是否在控制器中添加了太多逻辑?我是否应该将一些验证移到业务逻辑所在的服务层?
4

1 回答 1

9

这种方法正确吗?我还应该在其他层验证某些东西吗?

是的,部分。验证输入数据的正确性(如日期格式、长度等)似乎是正确的。无需将它们推送到内层。他们需要预先验证。

可能会根据业务规则进行一些验证,需要在服务层完成,例如在将用户添加到系统时是否已经注册了用户名/电子邮件,这将在服务层完成。

我是否在控制器中添加了太多逻辑?我是否应该将一些验证移到业务逻辑所在的服务层?

从我的角度来看,这不被视为逻辑。将数据验证到控制器中不同于向控制器中添加业务逻辑。您不是在更改/操纵数据,而是检查数据的正确性。

如上所述,一些遵循业务规则的验证需要在服务层中实现。

编辑:当您添加了 Web 服务标签时,假设您正在调用 Web 服务,然后在服务器端,它知道数据格式不正确。如果之前已经过验证,它可能会节省往返、服务器时间、网络资源等。

于 2013-05-06T08:05:27.520 回答