当前位置:  开发笔记 > 编程语言 > 正文

除了模型,视图,控制器和资产之外,Rails应用程序中的app文件夹中可以包含哪些类型的文件夹?

如何解决《除了模型,视图,控制器和资产之外,Rails应用程序中的app文件夹中可以包含哪些类型的文件夹?》经验,为你挑选了1个好方法。

在普通的Rails应用程序中,在app文件夹下我们有:资产,模型,视图,控制器等.应该为最佳实践创建哪些其他文件夹?

我在地方和项目中阅读,他们创建工作,序列化器,服务,验证器,渠道.一切都在那里?另外,lib目录中有哪些代码?



1> krnbatta..:

我想根据经验和研究在这里发表答案.请注意,这些不是惯例或必须做的事情.我一直在用它们(其中一些).由于每个的详细解释将需要针对每个问题的不同问题.我将在这里引用链接:

序列化器:我用它来序列化数据.在rails中,在将数据呈现为JSON时,我们拥有这个漂亮的Active Model Serializer 库.

乔布斯:我用它来实现工作.作业可以使用不同的排队后端排队和执行,如Sidekiq,Resque,Delayed Jobs.Active Job Basics是一个很好的文档.

邮件程序:我使用它来实现邮件程序,即我的应用程序的邮件结构.这是Action Mailer Basics的官方文档.

频道:我将它用于websockets实时功能.我们可以使用动作电缆库来实现帖子,聊天等实时功能.Action Cable已被添加到rails core中,可用作Faye等宝石的替代品.

规则:我在需要规则引擎实现的应用程序中使用它.以下是在ruby中提供规则引擎的某些宝石:Wongi,Ruleby,Rules Engine,Rools

服务:这些可用于在应用程序内执行复杂的操作.在模块化rails应用程序中,我们可以告诉应用程序的核心查看services文件夹.它们提供解耦,可视性,清洁控制器/模型,可在任何地方访问并易于测试.当行动复杂或跨多个模型达成或与外部服务交互时,可以使用它们.如果服务变得复杂,我们可以将其分解为其他服务.例如:GenerateReport,PublishWeekly,PayInvoice,RegisterUserWithGoogle.以下是阅读:Blog1,Blog2,Blog3,Blog4.

查询:数据库查询可以在这里.这些可以在应用程序的不同位置使用,同时隐藏查询逻辑.它也适用于单元测试.

表单:这些表单处理应用程序中的表单.它们主要用于从Rails模型中提取验证.它只是一个简单的Ruby类,包括ActiveModel::Model.我们可以使用改革宝石来实现这一点.以下是更多详细信息:ActiveModel表单对象

装饰者:这些可以用来替换助手.参见Draper gem.

验证器:自定义验证器可以在此处,即模型的不同属性,即用户中的电子邮件.以下是Custom Validators的示例.

响应者:这是我们发送回服务器以响应请求.阅读更多:响应者.还有响应者宝石,其中包括一组干扰的响应者模块.许多程序员也把它放在lib/responders而不是app/responders.

关注点:它们用于提取常见的和/或特定于上下文的代码块,以便清理模型并避免它们变得太胖和混乱.请参阅此处:ActiveSupport :: Concern.

上传者:他们用于存储与某些宝石相关的文件上传器配置:Shrine.

请注意,这不一定是惯例.结构完全取决于您和您的rails应用程序.一些项目可能包括更多子目录,如政策,支持,行动等,以实现更多干旱和SRP(单一责任原则).

参考:

http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/

https://www.toptal.com/ruby-on-rails/decoupling-rails-components

对于lib,请参阅以下链接:

https://devblast.com/b/rails-app-vs-lib

https://gist.github.com/maxim/6503591

http://blog.codeclimate.com/blog/2012/02/07/what-c​​ode-goes-in-the-lib-directory/

这是基于我的经验,研究,知识和意见,而不是任何官方指南的事实或惯例.


我认为这个答案很好地说明了根据对你有意义的组织应用程序.惯例只会带你到目前为止,事实上如果你以后改变主意,重新组织这个是一个简单的重构.
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有