在普通的Rails应用程序中,在app文件夹下我们有:资产,模型,视图,控制器等.应该为最佳实践创建哪些其他文件夹?
我在地方和项目中阅读,他们创建工作,序列化器,服务,验证器,渠道.一切都在那里?另外,lib目录中有哪些代码?
我想根据经验和研究在这里发表答案.请注意,这些不是惯例或必须做的事情.我一直在用它们(其中一些).由于每个的详细解释将需要针对每个问题的不同问题.我将在这里引用链接:
序列化器:我用它来序列化数据.在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-code-goes-in-the-lib-directory/
这是基于我的经验,研究,知识和意见,而不是任何官方指南的事实或惯例.