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
陆续⼭山寨了各⾃自的Rails • 直接向views/models/controllers⽂文件夹⾥里搭积⽊木,没有 编程背景的⼈人也可以快速上⼿手 • 缺乏良好设计的代码会积攒技术债,到项⺫⽬目的后期就开 始出现问题 • ⽤用Rails做出来的项⺫⽬目结构千篇⼀一律,OO设计去哪了? H T T P : / / G I T H U B . C O M / P M Q 2 0
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
码 ⾏行 数 • 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
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
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
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
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
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
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