- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用存储库模式与规范模式相结合来与服务网络交互(我更喜欢存储库而不是 DAO):正如此链接所示:http://thinkinginobjects.com/2012/08/26/dont-use-dao-use-repository/ .
用户界面与 Controller 交互, Controller 与服务交互,服务与存储库交互以及规范对服务Web进行CRUD操作,可以说这是应用程序的全局架构,分层架构。
我对 alitte 感到困惑,Web 服务的端点接受值,但它不接受负数,我将其声明为 int
并且没有 unsigned int
在 Java 中,所以现在最好在每个规范发出请求之前检查每个规范内值的有效性(因为我已经知道它会失败),或者仅在服务内部检查?我认为让每个规范检查它的值(value)更好,因为这样我就有义务使用这个规范的每个服务来处理这个检查,也像我可以避免代码重复,如果每个规范不进行检查,让服务为其执行此操作,检查将在每个服务中重复,在我看来,这不利于代码重用。
将验证放在存储库中是否很好,如果测试失败将引发异常,服务将不会捕获它,并让 Controller 捕获它以通知用户他输入的内容。
我对SRP(单一职责原则)有点困惑,这样做,每个规范是否都符合SRP?!!!! (我总是对SRP有疑问,我无法准确地弄清楚系统中每个类的职责是什么)。
这是一个 Android 应用程序,我们有意将其也作为 Web 应用程序(因此,我想以正确的方式进行操作,以最大限度地提高代码重用率)。
如果我以错误的方式这样做,如果有其他更好的方法或任何东西,请现在就告诉我:)
最佳答案
您可以在任何您想要的地方进行验证,但是,根据您放置的位置,验证会扮演不同的角色:
Controller 是面向用户的。因此,他们应该验证用户输入并呈现一些可读的错误。根据您使用的框架,这可能是单独的 validator 或绑定(bind)器等的任务,但它都与 Controller 密切相关。
无论如何,在完美的情况下,用户数据的任何验证都应该在 Controller 将请求转发到服务之前进行处理。如果您需要禁止输入“-1” - 它应该在这里。如果人们在文本字段中输入“abc” - 再次在这里。等等。
服务是面向域的。他们应该验证给定的任务是否可以使用给定的数据完成。但是,如果没有,它们应该使用某种断言调用快速失败或抛出运行时异常。他们不应该提供关于失败原因的漂亮错误列表(如果仅用于审计目的)。它们提供的任何数据都应该已经被之前的实体( Controller 、 validator 等)覆盖。服务唯一关心的事情是业务规则是否允许它们请求的操作。
如果服务层中的验证失败(抛出异常) - 这是一个信号,表明您在 Controller 中错过了一些验证。
有时,服务级别验证与 Controller 中的验证不匹配。想象一下在某些项目中的场景,普通用户只允许输入正值,而管理员也可以输入负值。由于某些业务逻辑原因,两者都不能输入“0”。验证“值为负数&&当前用户是否可以输入负数”将驻留在 Controller 中。验证“值为零”也将驻留在 Controller 中。服务只会有“如果值为零则抛出异常”或只是“断言值不为零”,因为从它的角度来看,它可以完成正面和负面的请求。
存储库/规范是面向数据源的。因此,这些可以添加一些与发送请求本身相关的断言。如果已知数据源不接受零 - 该层可以预先验证这一点,并在被赋予查询零的任务时抛出异常。
如果存储库层中的验证失败(抛出异常) - 这表明您在服务或 Controller 中错过了一些验证。
<小时/>换句话说:
因此,无论您的场景是什么,请考虑哪些约束是正确的,并适本地组织您的验证。
关于java - 验证值(value)观困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36454440/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!