Your SlideShare is downloading. ×
0
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
lotus让我们写出更solid的ruby工程
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

lotus让我们写出更solid的ruby工程

214

Published on



P.S.v.R @ [北京][2014年7月19日]Ruby Saturday

Published in: Engineering
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
214
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. L O T U S 让 我 们 写 出 更 S O L I D 的 R U B Y ⼯工 程 P. S . V. R @ [ 北 京 ] [ 2 0 1 4 年 7 ⽉月 1 9 ⽇日 ] R U B Y S A T U R D A Y H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 2. – N I G H T _ S TA L K E R @ I T E Y E “上上周在书店看到⼀一本《Ruby设计模式》,捡起 来 10 分钟看完,扔了(别问我为什么……) 下⾯面 ⽤用 Ruby 写写设计模式,顺便批⼀一批 Java 和 Gof。” H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 3. – 佚 名 “Patterns? Interfaces? Are you kidding me? This isn't Java, it's Ruby! ” H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 4. R A I L S 的 反 思 • Rails在过去极⼤大降低了web软件开发的⻔门槛,各语⾔言都 陆续⼭山寨了各⾃自的Rails • 直接向views/models/controllers⽂文件夹⾥里搭积⽊木,没有 编程背景的⼈人也可以快速上⼿手 • 缺乏良好设计的代码会积攒技术债,到项⺫⽬目的后期就开 始出现问题 • ⽤用Rails做出来的项⺫⽬目结构千篇⼀一律,OO设计去哪了? H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 5. L O T U S 的 设 计 思 想 • 简约——更少的领域特定语⾔言、更少的约定 • 宽容——不强加best-practice、留给开发者发挥空间 • 回归OO——⿎鼓励更多的对象、⾃自由构建对象继承结构 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 6. L O T U S 的 设 计 遵 循 关 注 点 分 离 原 则 。 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 7. S E PA R AT I O N O F C O N C E R N S , S O C • is a design principle for separating a computer program into distinct sections, such that each section addresses a separate concern. • 是处理复杂性的⼀一个原则。由于关注点混杂在⼀一起会导 致复杂性⼤大⼤大增加,所以能够把不同的关注点分离开来, 分别处理就是处理复杂性的⼀一个原则,⼀一种⽅方法。 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 8. 关 注 点 分 离 • Lotus 由诸多独⽴立的框架构 成 • 模型、控制器、路由、视图、 实⽤用⼯工具、助⼿手 • 每个框架都是⼀一个单独的 gem • 只要是Rack兼容的应⽤用都 可使⽤用Lotus::Router和 Lotus::Controller H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 9. L O T U S 各 组 件 的 代 码 ⾏行 数 • Lotus: 1,979 loc • Lotus::Controller - 2,411 loc • Lotus::Helper - 12 loc • Lotus::Model - 3,707 loc • Lotus::Router - 2,199 loc • Lotus::Utils - 1,751 loc • Lotus::View - 2,502 loc Each library is designed to be small, fast and testable. H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 10. H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 11. L O T U S : : R O U T E R 与 R A I L S 路 由 有 什 么 区 别 ? H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 12. T H E R A I L S R O U T E R • gem install journey • Journey is a router. It routes requests. • journey was merged on Rails 4.0, coupled with ActionPack code base. • 路由退居次要⾓角⾊色,隐藏在不透明的⼀一套机制后⾯面 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 13. L O T U S : : R O U T E R • an high-level router, not just for a specific framework • a router for all the Ruby web apps, including Sinatra and even Rails :) can be used eg. to dispatch HTTP requests for a pool of Sinatra applications • 路由是⼀一个简单的对象,其DSL也只不过是在这个对象 上调⽤用公共⽅方法 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 14. let components to emerge H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 15. L O T U S : : C O N T R O L L E R 与 A C T I O N _ C O N T R O L L E R 有 什 么 区 别 ? H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 16. A C T I O N _ C O N T R O L L E R • action=method • offers superclasses (eg.ActionController::Base) to be inherited • 控制器是⼀一个⼤大类,往往很臃肿 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 17. L O T U S : : C O N T R O L L E R • action=class • offers modules (eg. Lotus::Action) to be included • action将有更⾼高的内聚性,可防⽌止意外的数据泄漏、系 统的活动部件更少,因此鲁棒性、可靠度、可复⽤用性及 易懂性都能得到提⾼高 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 18. 完全不触及 数据库、完 全不触及⺴⽹网 络的 controller层 单元测试 封装 渲染属于MVC的其他层 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 19. L O T U S : : M O D E L 与 A C T I V E _ R E C O R D 有 什 么 区 别 ? H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 20. A C T I V E _ R E C O R D • 数据持久机制已经写死,必须是关系型数据库 • 往往⼀一个继承⾃自ActiveRecord::Base⼤大类,很臃肿 • ⼀一个模型类知道的太多,职责太多,出现了上帝对象 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 21. L O T U S : : M O D E L • 有三类对象:Entities、Data Mapper和Repositories • 数据持久机制与上层逻辑分离,应⽤用程序依赖API,⽽而 不依赖低层次的细节 (提问:什么OO原则),可以推迟 实现持久层,持久层甚⾄至可以是某第三⽅方REST服务 • Entity实现使⽤用域逻辑、Data Mapper是⼀一个持久性映 射、Repositories结合两者供给查询接⼝口 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 22. CRUD 纯内存对象 数据库⽆无关,真正的 脏活交给Adapter H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 23. S O L I D : F I V E B A S I C P R I N C I P L E S O F O B J E C T- O R I E N T E D D E S I G N • 单⼀一功能 • 开闭原则 • ⾥里⽒氏替换 • 接⼝口隔离 • 依赖反转 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 24. 因 此 , 使 ⽤用 L O T U S 框 架 促 使 让 我 们 写 出 更 S O L I D 的 R U B Y ⼯工 程 。 H T T P : / / G I T H U B . C O M / P M Q 2 0
  • 25. 欢 迎 关 注 H T T P S : / / G I T H U B . C O M / P M Q 2 0

×