Skip to content

Latest commit

 

History

History
83 lines (54 loc) · 4.51 KB

概览.md

File metadata and controls

83 lines (54 loc) · 4.51 KB

概览

Phoneix 是一个基于 Elixir 语言的遵循 MVC 模式的web开发框架。因此如果你有其他web开发框架比如 RoR 或者 Django的使用经验,其中的很多组件和概念会看起来很眼熟。

Phonex 融合了两种开发模式的精华 -- 惊人的开发效率和极高的应用性能。她同时还提供了一些有用的新功能,比如面向实时需求的channels 和为提升性能的模板预编译技术。

如果您已经熟悉 Elixir 语言,恭喜你,你有了一个不错的开始。如果您暂时还不熟悉,那么The Elixir guides是一个很好的起点。 在 Learning Elixir and Erlang Guide 里同样有不错的学习资源。

这篇文档的主要目的就是让您对 Phonenix 的里里外外有一个提纲挚领的了解。

Phonex

Phoneix 建立在一些模块化的,扩展灵活的组件之上,包括我们接下来要谈到的 PlugEcto。而更基础的 Erlang HTTP server, Cowboy 组件,本文档将不会涉及。

Phoenix 的各组件分工明确,职责清晰。我们将在接下来的章节中详细介绍他们,这里仅做一个快速鸟瞰:

handles all aspects of requests up until the point where the router takes over provides a core set of plugs to apply to all requests dispatches requests into a designated router

  • The Endpoint

    • 处理请求到知道其到达路由部分。
    • 提供一些针对到达请求的公用核心的组件。
    • 将请求分发给指定的路由。
  • 路由 (the Router)

    • 处理请求并分配给指定的控制器和动作(controller/action)。
    • 生成一些 helpers 方法提示路由路径和指向的资源。
    • defines named pipelines through which we may pass our requests
    • Pipelines
      • allow easy application of groups of plugs to a set of routes
  • 控制器 (Controllers)

    • 提供处理请求的函数(function),也就是action
    • 动作(Action)
      • 组织数据并传递到视图(view)中
      • 触发渲染模板
      • 处理重定向
  • 视图(views)

    • 渲染模板
    • 充当展示层
    • 定义可以在模板中使用的一些helper方法
  • 模板(Templates)

    • 如名字所示。
    • 通常被预编译,很快。
  • 通道(Channels)

    • 管理 sockets 让实时应用更容易。
    • 和控制器概念类似,另外她支持长连接的双向通讯。
  • 订阅发布(PubSub)

    • 在通道(Chnannels)层的下面,允许客户端订阅某一主题。
    • 为第三方的订阅和发布提供统一的适配器。
Plug

Plug 是一个通过可组合的模块们去构建web应用的规范,针对这个规范,她实现了一系列可重用的模块和函数。她们提供了松耦合的功能----比如请求头的解析和日志系统。得益于小而专一的API,plug组件们可以像管道(pipeline,类似Unix)命令那样被定义和顺序执行,她也同样能被跨项目的重复使用。

Plugs 被设计成几乎能处理任何事,从权限验证到参数预处理,甚至渲染。

Phoenix 在很多地方用到了 Plug 组件,尤其是路由(router)和控制器(controllers)部分。

Plug 最重要的功能之一就是为 HTTP server 提供适配器,并最终把内容呈现给终端用户,但目前 Plug 只是为 Cowboy 充当适配器,后者是 Loïc Hogui用 erlang 编写的 HTTP server。

更详细的内容请参考 Plug Guide

Ecto

Ecto 是一个数据库的中间层和查询语句的集合,通过她,我们可以读写不同的数据库,修改域值,用类型安全的方式编写复杂的查询,并保护我们免受常见的攻击,比如SQL注入等等。。

Ecto 建立在如下四个核心概念之上;

  • 信息库(Repo) -- 一个信息库代表一个独立的数据库连接。每个数据库操作都是通过这个信息库完成。

  • 模型(Model) -- 模型是对我们数据库数据的描述信息,她定义表名列名以及每一列的类型,她同时还定义模型之间的关联信息。

  • 查询(Query) -- 查询是连接信息库和模型的纽带,能让我们优雅的从信息库拉取数据并作用在modal上。

  • 变更(Changeset) -- 变更定义一系列的转换规则,用于处理模型数据以便于上层应用使用,包括类型转换,验证等等。。

新建的 Phoenix 应用默认使用 EctoPostgreSQL数据库。