Design patterns 在哪里保存验证逻辑

Design patterns 在哪里保存验证逻辑,design-patterns,Design Patterns,好的,我看过其他关于这方面的帖子,但没有一篇真正明确回答我的问题 验证逻辑应该在应用程序中的什么位置 我有一个小应用程序,它允许将新产品安装到应用程序数据库中。不同的产品具有不同的字段,即产品名称、订单号、说明等。可以插入新产品,也可以更新现有产品。因此,当插入新产品时,必须验证所有字段,但当更新现有产品时,则只需验证更新的字段,即可能只更新描述,因此只需验证该字段 我想为完整和部分产品验证器设计一个抽象类和两个具体类,每个类都有自己的类级验证逻辑 我觉得一定有更好的模式可以实现这一点——有什么

好的,我看过其他关于这方面的帖子,但没有一篇真正明确回答我的问题

验证逻辑应该在应用程序中的什么位置

我有一个小应用程序,它允许将新产品安装到应用程序数据库中。不同的产品具有不同的字段,即产品名称、订单号、说明等。可以插入新产品,也可以更新现有产品。因此,当插入新产品时,必须验证所有字段,但当更新现有产品时,则只需验证更新的字段,即可能只更新描述,因此只需验证该字段

我想为完整和部分产品验证器设计一个抽象类和两个具体类,每个类都有自己的类级验证逻辑


我觉得一定有更好的模式可以实现这一点——有什么建议吗?

假设您在项目中使用MVC模式,那么验证逻辑应该属于模型。如果您正在处理一个n层项目,请将验证逻辑放在业务层中,并确保在没有先前验证的情况下无法编写任何实体


但我总是会验证整个对象。整理出已经改变的内容,只验证这些内容似乎有些过火。当然,除非通过测量您确切地知道这将是一个性能问题

假设您在项目中使用MVC模式,验证逻辑将属于模型。如果您正在处理一个n层项目,请将验证逻辑放在业务层中,并确保在没有先前验证的情况下无法编写任何实体

但我总是会验证整个对象。整理出已经改变的内容,只验证这些内容似乎有些过火。当然,除非通过测量您确切地知道这将是一个性能问题

验证逻辑应该在应用程序中的什么位置

取决于您的体系结构。验证可以分多个阶段进行,以实现响应性。通常,尽管模型/控制器似乎是给定MVC体系结构中的一个好位置。这个问题在过去的某个时候出现了。模型应该负责接受/拒绝输入,这似乎是合理的

因此,在开发新产品时 如果已插入,则所有字段都必须 验证

但是当一个现有的产品 正在更新,然后仅更新字段 更新需要验证 i、 也许这只是描述 正在更新,因此仅该字段 应该进行验证

您不可能预测将更新的确切部分。因此,您需要为数据库的所有字段列编写验证器

当然,除非验证一组特定的属性过于复杂/耗时,否则您可以简化工作并使用单个验证器类

验证逻辑应该在应用程序中的什么位置

取决于您的体系结构。验证可以分多个阶段进行,以实现响应性。通常,尽管模型/控制器似乎是给定MVC体系结构中的一个好位置。这个问题在过去的某个时候出现了。模型应该负责接受/拒绝输入,这似乎是合理的

因此,在开发新产品时 如果已插入,则所有字段都必须 验证

但是当一个现有的产品 正在更新,然后仅更新字段 更新需要验证 i、 也许这只是描述 正在更新,因此仅该字段 应该进行验证

您不可能预测将更新的确切部分。因此,您需要为数据库的所有字段列编写验证器


您可以简化生活并使用单个验证器类,当然,除非验证一组特定的属性太复杂/耗时。

有几个地方可以而且应该进行验证,因为有不同的有效性级别:

在客户端,可以在用户界面控件关闭时检查所需的字段;应该检查需要匹配正则表达式(例如日期的yyyy-MM-dd)的字符串。在web UI上,这通常是使用JavaScript完成的。 在服务器端,当绑定输入参数时,应该检查对象的有效性。 处理时仍需检查有效对象的业务有效性,例如,使用信用卡付款时需要有效的信用卡号。
您应该同时进行客户端和服务器端验证。当输入绑定到对象时,绑定和验证由服务层完成。在处理用例时,它们也会检查业务规则。

有几个地方可以并且应该进行验证,因为有不同的有效性级别:

论客户si de,用户界面控件关闭时,可以勾选需要的字段;应该检查需要匹配正则表达式(例如日期的yyyy-MM-dd)的字符串。在web UI上,这通常是使用JavaScript完成的。 在服务器端,当绑定输入参数时,应该检查对象的有效性。 处理时仍需检查有效对象的业务有效性,例如,使用信用卡付款时需要有效的信用卡号。
您应该同时进行客户端和服务器端验证。当输入绑定到对象时,绑定和验证由服务层完成。在处理用例时,它们也会检查业务规则。

我将知道作为验证器的部分或整个产品是否会通过一系列字段进行验证。如果系统中存在产品id,那么就可以非常正确地假设我们处理的是更新而不是插入。因此,根据产品是否存在,我有两条路径。这是我的第一张支票。因此,我是否应该为每个字段创建一个方法来验证该字段,然后每个验证器类(部分和全部)都可以有自己的逻辑来调用所需的方法?@Bob:区分更新和插入很容易。不久前,我在基于SOA的Web服务上工作,有一个确切的问题需要解决。我所做的是为每个字段放入验证器,而不是为每个字段派生一个类,因为这些字段大多是标量/普通类型。将字段连接到SQL语句的查询创建逻辑自动调用验证。还要注意,我建议使用现有的验证器,而不是使用自己的验证器。但是,如果您必须自己滚动,请了解白名单/黑名单。在验证更新时,您如何处理需要检查哪些字段正在更新,哪些字段没有更新的大量条件语句?或者你只是接受更新会发生这种情况吗?正如我所说的,验证是零零碎碎地进行的。假设我有一个包含姓名和移动字段的员工记录。我需要创建一个表单update的SQL语句。。。。为此,我将要更新的参数数组作为fieldname和fieldvalue的映射传递,并相应地调用相应的fieldvalidator。我很幸运使用了PHP,因为这个问题得到了简单的解决:-或者,如果您确定只有一小部分字段会得到更新,那么您可以创建一组自定义的更新验证器。这以后可能会成为一个维护问题。我将知道,作为我的验证器,它是一个部分产品还是整个产品将通过一系列字段进行验证。如果系统中存在产品id,那么就可以非常正确地假设我们处理的是更新而不是插入。因此,根据产品是否存在,我有两条路径。这是我的第一张支票。因此,我是否应该为每个字段创建一个方法来验证该字段,然后每个验证器类(部分和全部)都可以有自己的逻辑来调用所需的方法?@Bob:区分更新和插入很容易。不久前,我在基于SOA的Web服务上工作,有一个确切的问题需要解决。我所做的是为每个字段放入验证器,而不是为每个字段派生一个类,因为这些字段大多是标量/普通类型。将字段连接到SQL语句的查询创建逻辑自动调用验证。还要注意,我建议使用现有的验证器,而不是使用自己的验证器。但是,如果您必须自己滚动,请了解白名单/黑名单。在验证更新时,您如何处理需要检查哪些字段正在更新,哪些字段没有更新的大量条件语句?或者你只是接受更新会发生这种情况吗?正如我所说的,验证是零零碎碎地进行的。假设我有一个包含姓名和移动字段的员工记录。我需要创建一个表单update的SQL语句。。。。为此,我将要更新的参数数组作为fieldname和fieldvalue的映射传递,并相应地调用相应的fieldvalidator。我很幸运使用了PHP,因为这个问题得到了简单的解决:-或者,如果您确定只有一小部分字段会得到更新,那么您可以创建一组自定义的更新验证器。这以后可能会成为维护问题。请记住,验证不限于单字段验证。有许多级别的验证,字段验证之后的第一个级别是记录/对象验证规则,其中字段相互关联。然后,您可能会遇到这样一种情况:当您更改FieldA时,FieldB已变得无效,即使它没有更改。一个人为的例子是将某人的年龄调整到法定驾驶限制以下。如果你也有一个字段给出了他们的驾照号码,那么现在就完全是非法的了
cal如果该字段具有实际值,请记住验证不限于单个字段验证。有许多级别的验证,字段验证之后的第一个级别是记录/对象验证规则,其中字段相互关联。然后,您可能会遇到这样一种情况:当您更改FieldA时,FieldB已变得无效,即使它没有更改。一个人为的例子是将某人的年龄调整到法定驾驶限制以下。如果您还有一个字段提供了他们的驾照号码,那么如果该字段有实际值,那么现在就完全不合逻辑了