第1页
如何用Rails开发一个 任务管理的网站和移动App
rain@beansmile
第2页
陈林燏 RainChen
Web Dev since 2005 Use Ruby since 2007
CTO & CO-Founder of
第3页
Mobile App Agile
HTML5
Rails
Web
Professional
Ruby Reliable
第4页
如何用rails开发一个任务管理的网站和移动app
一个任务管理系统的 常见功能点
第6页
如何用rails开发一个任务管理的网站和移动app
1. 创建、分配任务
为了提高操作上的用户体验,选用前端SPA+后端API的架构
第7页
如何用rails开发一个任务管理的网站和移动app
1. 创建、分配任务
为了提高操作上的用户体验,选用前端
2. 随时反馈
要手机可用web版,最好有单独的app
第8页
如何用rails开发一个任务管理的网站和移动app
1. 创建、分配任务
为了提高操作上的用户体验,选用前端
2. 随时反馈
要手机可用
3. 通知消息
通知方式可以有多种,如邮件通知、移动app推送
第9页
如何用rails开发一个任务管理的网站和移动app
1. 创建、分配任务
为了提高操作上的用户体验,选用前端
2. 随时反馈
要手机可用
3. 通知消息
通知方式可以有多种,如邮件通知、移动
4. 重复性的任务
如发项目周报、举行周例会
第10页
如何用rails开发一个任务管理的网站和移动app
1. 创建、分配任务
为了提高操作上的用户体验,选用前端
2. 随时反馈
要手机可用
3. 通知消息
通知方式可以有多种,如邮件通知、移动
4. 重复性的任务
如发项目周报、举行周例会
5. 权限处理
附件可不可以看、子任务可不可以看等复杂的权限问题
第11页
如何用rails开发一个任务管理的网站和移动app
前后端的架构
第12页
如何用rails开发一个任务管理的网站和移动app
前后端的架构
+
第13页
如何用rails开发一个任务管理的网站和移动app
第14页
如何用rails开发一个任务管理的网站和移动app
1. 最接近rails风格
最初是提取自一个rails项目
2. 上手简单
15分钟入门
3. 扩展丰富
自定义mixin容易
4. 跟rails 结合异常简单
gem “backbone-rails”
第15页
如何用rails开发一个任务管理的网站和移动app
第16页
如何用rails开发一个任务管理的网站和移动app
1. 简单、灵活、实用的DSL 2. 直观、灵活、可重用的响应格式
gem “grape-entity”
第17页
Grape DSL demo
第18页
Grape DSL demo
第19页
Grape DSL demo
第20页
Grape DSL demo
第21页
Grape DSL demo
第22页
Grape DSL demo
第23页
Grape DSL demo
第24页
Grape DSL demo
第25页
Grape DSL demo
第26页
Grape DSL demo
第27页
Grape DSL demo
第28页
Grape DSL demo
第29页
Grape DSL demo
第30页
Grape DSL demo
第31页
Grape DSL demo
第32页
Grape DSL demo
第33页
Grape DSL demo
第34页
Grape DSL demo
第35页
Grape DSL demo
第36页
Grape API demo
第37页
Grape API demo
第38页
Grape API demo
第39页
Grape API demo
第40页
Grape API demo
第41页
Grape API demo
第42页
Grape API demo
第43页
Grape API demo
第44页
Grape API demo
第45页
Grape API demo
第46页
Grape API demo
第47页
Grape API demo
第48页
Grape API demo
第49页
Grape API demo
第50页
Grape API demo
第51页
Grape API demo
第52页
Grape entity demo
第53页
Grape entity demo
第54页
Grape entity demo
第55页
Grape entity demo
第56页
Grape entity demo
第57页
Grape entity demo
第58页
Grape entity demo
第59页
Grape entity demo
第60页
Grape entity demo
第61页
Grape entity demo
第62页
Grape entity demo
第63页
Grape entity demo
第64页
Grape entity demo
第65页
移动端
第66页
如何用rails开发一个任务管理的网站和移动app
移动端的架构
第1版
第67页
如何用rails开发一个任务管理的网站和移动app
移动端的架构
第1版
+
=> (类似AppPresser的做法) half-hybrid app
第68页
如何用rails开发一个任务管理的网站和移动app
+
好处 1. 一次开发同时得到mobile web和app 2. 开发快速,调试方便
坏处 1. 体验差:所有资源从服务器加载 2. 没有native app的优势 3. 没有推送消息
第69页
如何用rails开发一个任务管理的网站和移动app
移动端的架构
第2版
第70页
如何用rails开发一个任务管理的网站和移动app
移动端的架构
第2版
=+ => hybrid app
第71页
如何用rails开发一个任务管理的网站和移动app
好处 1. UI友好:针对移动端优化的UI组件 2. 丰富的native组件:摄像头,上传文件,推送消息 3. 开发快速,调试方便
坏处 1. 上手略难(需要熟悉angularjs) 2. 性能不如纯native app(在android上更为明显)
第72页
如何用rails开发一个任务管理的网站和移动app
移动端的架构
第3版 RubyMotion http://rubymotion.com/download
第73页
如何用rails开发一个任务管理的网站和移动app
通知消息
第74页
如何用rails开发一个任务管理的网站和移动app
请注意,前方高能! 一大波代码正在接近…
第75页
如何用rails开发一个任务管理的网站和移动app
通知消息
第1天
有新任务被指派时,被指派人要能收到邮件通知
第76页
如何用rails开发一个任务管理的网站和移动app
通知消息
第1天 有新任务被指派时,被指派人要能收到邮件通知
Piece of cake啦!😁
第77页
通知消息代码展示
第78页
通知消息代码展示
第79页
如何用rails开发一个任务管理的网站和移动app
通知消息
第2天 增加一个角色叫订阅者; 任务改变指派人时要发邮件通知创建者和订阅者
Hold得住!😊
第80页
通知消息代码展示
第81页
通知消息代码展示
第82页
通知消息代码展示
第83页
通知消息代码展示
第84页
如何用rails开发一个任务管理的网站和移动app
通知消息
第3天
增加移动端的推送,将来还能支持SMS通知; 并且用户可设置选择使用邮件、推送或短信 通知方式
有点压力😥
第85页
通知消息代码展示
第86页
通知消息代码展示
第87页
通知消息代码展示
第88页
通知消息代码展示
第92页
如何用rails开发一个任务管理的网站和移动app
通知消息
第4天
更多的通知事件、更多的通知方式、 更复杂的需求…
… 😱
第93页
如何用rails开发一个任务管理的网站和移动app
那么问题来了
第94页
如何用rails开发一个任务管理的网站和移动app
如何实现灵活的通知消息?
第95页
如何用rails开发一个任务管理的网站和移动app
如何实现灵活的通知消息?
1. 使用订阅模式触发通知事件 让增加通知事件变得简单灵活
2. 使用命令模式注册通知服务 让增加通知方式变得简单轻松
第96页
如何用rails开发一个任务管理的网站和移动app
进行代码重构
第97页
使用订阅模式触发通知事件
第98页
使用订阅模式触发通知事件
第99页
使用订阅模式触发通知事件
第100页
使用订阅模式触发通知事件
第101页
使用订阅模式触发通知事件
第102页
使用订阅模式触发通知事件
第103页
使用订阅模式触发通知事件
第104页
使用订阅模式触发通知事件
第105页
使用订阅模式触发通知事件
第106页
使用订阅模式触发通知事件
#可按需要增加广播事件
第107页
使用订阅模式触发通知事件
# app/listeners/assigned_listener.rb
添加事件订阅者, 在订阅者中发送通知
第108页
使用订阅模式触发通知事件
#设置事件被触发时的响应逻辑
第109页
使用订阅模式触发通知事件
第110页
使用订阅模式触发通知事件
第111页
使用订阅模式触发通知事件
#告知通知中心发送对应的消息
第112页
使用订阅模式触发通知事件
第113页
使用订阅模式触发通知事件
第114页
使用订阅模式触发通知事件
#注册订阅者
第115页
使用订阅模式触发通知事件
第116页
使用命令模式注册通知服务
第117页
使用命令模式注册通知服务
第一步 1. 定义统一的Notifier入口 2. 定义消息发送基类
第118页
使⽤用命令模式注册通知服务
第119页
使⽤用命令模式注册通知服务
#定义统一的Notifier入口
第120页
使⽤用命令模式注册通知服务
第121页
使⽤用命令模式注册通知服务
第122页
使⽤用命令模式注册通知服务
#定义消息发送基类
第123页
使⽤用命令模式注册通知服务
第124页
使用命令模式注册通知服务
第二步 1. 实现邮件发送的具体逻辑 2. 注册邮件通知服务
第125页
使⽤用命令模式注册通知服务
第126页
使⽤用命令模式注册通知服务
第127页
使⽤用命令模式注册通知服务
第128页
使⽤用命令模式注册通知服务
第129页
使⽤用命令模式注册通知服务
第130页
使⽤用命令模式注册通知服务
第131页
使⽤用命令模式注册通知服务
第132页
使⽤用命令模式注册通知服务
第133页
使⽤用命令模式注册通知服务
第134页
如何用rails开发一个任务管理的网站和移动app
代码重构完成!
第135页
如何用rails开发一个任务管理的网站和移动app
通知消息
更多的通知事件、更多的通知方式、 更复杂的需求…
冇问题啦!😉
第136页
如何用rails开发一个任务管理的网站和移动app
重复性任务
第137页
如何用rails开发一个任务管理的网站和移动app
重复性任务
1. 无限重复任务
显示是虚数据,访问时才实例化
2. 定时任务
时间到时自动实例化
3. clone的实现
gem “deep_cloneable”
4. 计算重复规则
gem“ice_cube”
5. 周期性任务的通知
使用sidekiq
第138页
如何用rails开发一个任务管理的网站和移动app
权限处理
遇到的问题
第139页
如何用rails开发一个任务管理的网站和移动app
权限处理
遇到的问题
1. 权限规则复杂,角色和资源交错
创建者、被指派人、订阅者、父任务、子任务、 任务附件、任务态等等因子
2. 前端有不少访问细节
附件可不可以看、子任务可不可以看,有些情况完成状态不能改
第140页
如何用rails开发一个任务管理的网站和移动app
权限处理
解决方法
第141页
如何用rails开发一个任务管理的网站和移动app
权限处理
解决方法 1. gem “cancancan”
可读、好维护、灵活的DSL
2. 给CanCan::ModelAdapters打补丁让can方法 可使用query scope
can :index, Task, Task.where(…)
3. API 输出资源的可用权限集合
expose :abilities
4. Backbone自定义mixin
currentRole.can('create', 'User')
第142页
使用cancancan进行权限定义
第143页
使用cancancan进行权限定义
第144页
在资源中定义出可用权限集合
第145页
在资源中定义出可用权限集合
第146页
在资源中定义出可用权限集合
第147页
在资源中定义出可用权限集合
第148页
API 暴露可用权限集合
第149页
API 暴露可用权限集合
第150页
backbone view中对细节权限判断
第151页
backbone view中对细节权限判断
第152页
如何用rails开发一个任务管理的网站和移动app
参考
• https://github.com/intridea/grape • https://github.com/ruby-grape/grape-entity • http://backbonejs.org/ • https://github.com/codebrew/backbone-rails • http://phonegap.com/ • http://ionicframework.com/ • https://github.com/CanCanCommunity/cancancan
第153页
如何用rails开发一个任务管理的网站和移动app
THANK YOU
第154页
如何用rails开发一个任务管理的网站和移动app
Q & A
第155页
如何用rails开发一个任务管理的网站和移动app
JOINT US
contact rain@beansmile.com