Ruby on rails 处理用户'后报告错误的OOD;服务层中的s请求

Ruby on rails 处理用户'后报告错误的OOD;服务层中的s请求,ruby-on-rails,web,soa,object-oriented-analysis,Ruby On Rails,Web,Soa,Object Oriented Analysis,我相信在用户的请求过程中可能会发生两种类型的错误 {1}:系统错误(异常、致命错误、警告、通知等) {2}:用户控制错误(用户所做的错误,通常发生在验证期间) 通常,报告{1}相对简单。大多数人只会显示一个错误页面或通知。{2}情况不同 Yii和Rails以及其他一些框架提供了一个验证方案,您可以在其中为模型中的每个属性指定验证器。在验证过程中,验证程序将验证指定的属性,并以映射形式报告错误:attributeName=>array of errors 在应用程序中,中的服务可能依赖于其他服务的

我相信在用户的请求过程中可能会发生两种类型的错误

{1}:系统错误(异常、致命错误、警告、通知等)
{2}:用户控制错误(用户所做的错误,通常发生在验证期间)

通常,报告{1}相对简单。大多数人只会显示一个错误页面或通知。{2}情况不同

Yii和Rails以及其他一些框架提供了一个验证方案,您可以在其中为模型中的每个属性指定验证器。在验证过程中,验证程序将验证指定的属性,并以映射形式报告错误:attributeName=>array of errors

在应用程序中,中的服务可能依赖于其他服务的逻辑和域模型的逻辑,因此其属性集和验证也可能依赖于这些外部服务和域模型

例如,用户注册服务拥有“用户名”和“密码”属性,其逻辑规则可能取决于验证用户名最大长度和密码最大长度时用户的逻辑规则


所以我的问题是,我们如何通过许多依赖层验证这些属性,并将错误报告给用户

没那么难。您可以使用某种形式的客户端验证在客户端处理大多数模型验证错误。例如,您可以使用客户端验证gem进行验证。您可以将这些错误呈现为通知或警报,也可以呈现为以下内容

@user.errors.full_messages.join('. ')

现在回到您的问题,您可以有多个异常处理层。层的首选项取决于您正在实现的功能。例如,在创建新用户时,首先要检查的是数据有效性。此外,您还可以拥有应用程序范围的异常处理程序,并且每个异常处理程序都可以拥有自己的错误报告机制。所以这取决于具体情况

由于模型验证错误不是例外,我认为在这种情况下使用异常处理程序是不可行的。确切地说,对于注册用户时的注册系统,重点将放在用户数据验证上,而在登录用户时,重点应该放在对用户进行身份验证上。无需检查用户名或密码验证。在注册系统中,我们必须验证用户名最大长度、用户电子邮件最大长度、密码最大长度等,以确保其符合数据库设置,因此注册系统必须要求域模型或数据映射器进行这些验证。我在决定服务是否必须从这些外来对象导入验证,还是让它们验证并冒泡错误时犹豫不决。