对于 phoenix
来讲, 它是一个 web 开发框架, 它的设计实现思想和 Rails 还有 django
等都是如出一辙. 基本上就是基于 MVC
的模型来实现服务器端. 对于它来说不仅仅实现了高效的开发,而且还拥有者高性能的表现. 同时它还具有一些有趣的特性如信道, 可以用来实现实时更新的功能, 还有预编译模板等来提高速度.
对于 Phoenix
来说, 它是基本 elixir
这门语言来写的, 所以需要了解 elixir
, 如果你已经掌握了 elixir
那就完美, 当然还不是很了解没有关系可以在这里学习.
接下来我们说说具体对于这个框架本身, 它是如何实现以及各个部分的组成.
接下来说说具体的组成. 其实对于 Phoenix
框架来说,它也是一个集大成者. 通过集合各个层面上优秀的实现来完成最终的任务, 同时这样的设计又不失灵活性和扩展性. 如包含了 Plug
, Ecto
, 还有 Erlang
领域的 HTTP
服务器 Cowboy
等.
组成
它有下面这些部分组成,各司其职最终形成一个 web 的开发框架. 这里就说说具体的不同组成和角色.
-
Endpoint
- 这个端点将会接收所有的请求
- 提供了一系列核心的过滤应用到所有的请求
- 分发具体的请求到指定的路由
-
路由
- 解析请求然后分发到指定的控制器和动作上, 解析参数等.
- 提供了一些帮助方法来解析路由生成资源路由等
- 定义一些命名的管道,我们可以用来传递请求
- 管道
- 可以轻松应用过滤( plug)到一系列的路由上.
-
控制器
- 提供一些方法,也就是
动作
来对应处理请求 - 动作
- 准备数据然后传递给视图
- 出发视图渲染
- 负责调转等
- 提供一些方法,也就是
-
视图
- 渲染模板
- 充当展示层
- 定义些帮助方法,用于模板, 然后一些数据的修饰用来展示
-
模板
- 就是模板咯
- 预编译
-
信道
- 管理 sockets 了解,来轻松实现实时通信
- 和控制器类型, 除了它可以允许双向通信来完成持久化连接
-
发布和订阅
- 基于信道层,允许客户端来订阅不同的主题
- 抽象出了发布订阅适配器用来完成第三方实现的集成.
何为 Plug
[Plug](http://hexdocs.pm/plug/)
即一个定义说明关于如何定于组装模块,用来构建 web 工程. Plug 通常都是可以重用的模块或者函数, 他们提供完全不相关的行为, 像是解析请求头或者日志等, 因为 Plug 的 API 都是小而且不变的, 他们通常可以被组装使用, 好比已给管道一样. 或者可以用于多个项目等.
Plug 可以用来被处理任何事情,从验证到参数解析, 设置渲染.
Phoenix 算是把 Plug用到了极致, 特别是路由和控制器部分尤甚.
关于 Plug 最主要的一个点就是它提供了 Http 服务器的适配器, 然后可以无限的给用户提供程序的内容,当前 Plug 只是提供了 Cowboy
的适配, 一个 erlang 的 web 服务器.
接下来可以从这里了解更多的内容.
Ecto
[Ecto](http://hexdocs.pm/ecto)
算是一门单独的语言, 它集成了查询工具, 还有 Elixir
对于数据库操作的封装. 通过使用 Ecto, 我们可以操作不同的数据库, 操作对象数据,进行复杂的程序等
对于 Ecto
, 它又下面4个具体的抽象概念
- Repo - 也就是一个具体的数据库.
- Model - 也就是对于数据的定义.
- Query - 查询是绑定到具体的 model 还有 repo 上的. 能够让我们很优雅的拿数据和赛数据.
- Changeset - 它声明了一种转换形式,在我们拿到数据和具体使用之前的转换, 包括验证, 转换等操作
默认的 Phoenix
会使用 Ecto
和 PostgreSQL
来实现数据持久化.