2KB项目,专业的源码交易网站 帮助 收藏 每日签到

Trailblazer 简介

  • 时间:2019-01-23 18:33 编辑:2KB 来源:2KB.COM 阅读:309
  • 扫一扫,手机访问
  • 分享
摘要:
Trailblazer 英文原文:Trailblazer

Trailblazer 位于Rails顶端,是,thin web 服务器的一个层(layer)。它温和的实施封装,有直观的代码结构,并且提供面向对象的架构。

坚果壳内:trailblazer允许你跟操作数据对象一样编写无逻辑模块,不包含回收,嵌套,验证或域逻辑。它通过提供一些附加层移除bulky controllers和strong_parameters来承载代码并完全取代helpers

请支持我即将出版的新书 Trailblazer - A new architecture for Rails,免费阅读样章,让我知道你的想法。

书中讨论了demo application工具。
 

使命

开拓者(Trailblazer)为您在Rails的各个方面提供Ruby抽象层,它不传教你。只要你愿意,你可以回退到“Rails通道”模型,单片控制器,全局佣工等,这是不是一件坏事,但让你分步介绍开拓者的封装在你的应用程序,而无需重写它。

Trailblazer是所有关于结构。它有助于重新组织现有的代码放到哪里不同的关注点在分离类处理更小的组件。形式进入表单对象,视图是面向对象的MVC控制器,业务逻辑发生在通过完全脱钩的持久性对象支持专用的域对象。

同样,你可以选择你想要的图层。开拓者并没有对技术的实现,它提供了经常性在所有类型的Rails应用程序的问题,成熟的解决方案。

Trailblazer没有“对象和间接的复杂的网络。”它解决了已经存在多年了干净的分层架构的许多问题。只使用你喜欢什么。这就是底线。

OOP 概念框架

Trailblazer提供你一个新的,更直观的文件布局在Rails应用程序中,您文件的结构概念
 

app
├── concepts
│   ├── comment
│   │   ├── cell.rb
│   │   ├── views
│   │   │   ├── show.haml
│   │   │   ├── list.haml
│   │   ├── assets
│   │   │   ├── comment.css.sass
│   │   ├── operation.rb
│   │   ├── twin.rb

文件、类和视图逻辑上属于一个 概念 保存在一个地方。 你可以自由使用其他名称空间中的一个概念。 开拓者试图保持尽可能简单,。

体系结构

Trailblazer扩展了传统的MVC Rails堆栈。 记住,添加层并不一定意味着添加更多的代码和复杂性。

相反的情况:控制器、视图和模型成为精益HTTP端点,渲染和持久性。冗余代码被投入很少的应用程序代码消除正确的层。
 

The Trailblazer stack.
 


Routing(路由)

Trailblazer使用Rails的路由URL映射到控制器(我们将添加到简化路由推出)。

Controllers(控制器)

控制器是瘦终端的HTTP。它们分化请求的格式,如HTML或JSON之间并立即派遣一个操作。控制器不包含任何业务逻辑。
 

Trailblazer提供了四种方法来呈现和调用操作。但在这之前,你需要包括Controllers 模块。
 

class CommentsController < ApplicationController
  include Trailblazer::Operation::Controller

Rendering the form object(喧染表对象)

操作可以填充,并展示他们的表单对象,因此它可以与simple_form和其他形式的助手使用。

def new
  form Comment::Createend

这将运行操作,但不是它的validate验证码。它在控制器然后设置@form实例变量,因此它可以被渲染。

= form_for @form do |f|
  = f.input f.body

#form 是指对象#new和#edit,只有HTML有动作。

运行操作

如果你不打算保留不同要求的格式,最简单的就是用#run来操作处理输入数据。

def create
  run Comment::Createend

这只需运行Comment::Create[params].
你也可以传递你自己的参数。

def create
  run Comment::Create, params.merge({current_user: current_user})end

一个额外的块将被执行仅当操作结果是有效的。

def create
  run Comment::Create do |op|    return redirect_to(comments_path, notice: op.message)  endend

注意该动作的实例是产生的块。
一个无效的响应的情况下可以在块之后进行处理。

def create
  run Comment::Create do |op|    # valid code..
    return
  end

  render action: :newend

 不要忘了,从有效块return,否则既有效块和无效的通话之后将被调用。  

Responding(响应)

另外,您也可以使用Rails的出色#respond_with让一个响应处理所要渲染的。操作可以传递到respond_with。发生这种情况自动#respond,让Trailblazer调用操作的第三个方法。

def create
  respond Comment::Createend

这将只需运行操作和Chuck的情况下进入应答让后者梳理呈现了什么或者重定向。操作代表各自的调用其内部model。

你还可以在该块处理不同的格式。这是完全细做,在控制,因为这是端点的逻辑是HTTP特有的,而不是business。

def create
  respond Comment::Create do |op, formats|
    formats.html { redirect_to(op.model, :notice => op.valid? ? "All good!" : "Fail!") }
    formats.json { render nothing: true }  endend

传递给#respond块总是执行,无论操作结果的有效性。目标是让响应处理操作的有效性。

formats对象只是传递到#respond_with。

Presenting(介绍)

对于#show模式行为,单纯使用HTML页面或JSON或XML文档的,#present方法就派上用场了。

def show
  present Comment::Createend

同样,这将只运行操作的设置,并提供了模型@model。然后,您可以使用cell或控制器视图HTML呈现模型。

对于基于文档的API和非HTTP请求类型的操作将被告知渲染操作使用申述的JSON或XML文档。

需要注意的是#present还将代替#form(允许它也在#new和#edit使用)作为响应将不会触发任何渲染。

Controller API(控制器API)

在这三种情况下的实例变量分配:@operation,@form,@model.

Operation(操作)

操作封装业务逻辑。每高一级域名的功能之一操作使用。不同的格式或环境的子类进行处理。操作对于HTTP无感知的。

class Comment < ActiveRecord::Base
  class Create < Trailblazer::Operation
    def process(params)      # do whatever you feel like.
      self
    end
  endend

操作只需要执行#process从调用接收参数。

Call style(调用样式)

最简单运行的操作是调用样式。

op = Comment::Create[params]

使用Operation#[]将会返回该操作的实例,在无效操作的情况下,这将引发异常。
注意如何可以容易用于测试工厂。

let(:comment) { Comment::Create[valid_comment_params].model }

使用操作作为测试工厂是Trailblazer的基本概念,以消除冗余的buggy(越野车)在测试和手动工厂。

Run style(运行样式)

您可以手动运行的操作,并使用相同的块语义在控制器中。

Comment::Create.run(params) do |op|  # only run when valid.end

 当然,这并不抛出异常,而只是当操作无效时跳过该块。  

Validations(验证)

操作通常有一个表单对象,它仅仅是一个Reform:: Form类。所有记录在Reform的API可以应用和使用。

该操作利用表单对象来使用#validate方法。

class Comment < ActiveRecord::Base
  class Create < Trailblazer::Operation
    contract do
      property :body, validates: {presence: true}    end

    def process(params)      @model = Comment.new

      validate(params[:comment], @model) do |f|
        f.save      end
    end
  endend

该contract(又名表单)在::contract块中定义。可以实现嵌套形式,默认值,验证,以及其他一切Reform提供的。

该情况下的一个有效的形式为#validate块被调用。它接收填充表单对象。您可以使用表单来保存数据或写你自己的逻辑。

从技术上来说,真正发生在Operation#validate如下。

contract_class.new(@model).validate(params[:comment])

 从Reform而言,这是一个熟悉的工作流程。验证与模型无关。  

Models(模块)

模块的持久性可以用你喜欢的任何ORM来实现,比如ActiveRecord的或DataMapper的。

在Trailblaze,模块是完全空的,仅配置数据库相关指令和协议。没有业务逻辑是允许在车型。只有操作,视图和组件可以直接访问模块。

Views(视图)

查看渲染可以使用从Rails的知名控制器发生。这绝对是简单的视图。

更复杂的UI逻辑发生在视图模型的cells中发现的。视图模型替换助手。

    1.HTTP API消费和渲染API文档(如JSON或XML)是通过轰鸣声和表示的完成。他们通常继承合同的模式。

    2.测试待测试主要是操作和查看模型,因为它们封装你的应用程序的终结点行为。作为一个好的副作用,工厂通过简单的操作要求更换。

Controller API (控制器API)

Normalizing params

覆盖#process_params!添加或操作运行之前删除值PARAMS。这就是所谓的在#run,#respond和#present。

class CommentsController < ApplicationController
  # ..private
  def process_params!(params)
    params.merge!(current_user: current_user)  endend

这集中PARAMS正常化,在每一个动作里,并不需要你手动。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部