@CSS魔法
2016. 03. 01.
URL、Controller、模板
(45~60 分钟)
架构的目的是什么?
为什么要有架构?
架构的三大目标:
清理、抽象、分离
规范、工具
新技术、工具
总之:让业务工程师更爽!
关注点:
架构组的日常工作(以我为例):
20%
30%
50%
这还不是最憋屈的……
下面没有了……
架构 = 苦逼
浏
览
器
Routing
Controller
模板
(View)
HTML
URL
数据
一次常规的页面请求:
手机站 (WAP 站) 的 URL 策略:
m.shanghai.baixing.com/...
www.baixing.com/m/...
m.baixing.com/...
shanghai.baixing.com/m/...
桌面站 (Web 站) 的 URL:
shanghai.baixing.com/...
www.baixing.com/...
shanghai.m.baixing.com/...
推荐
事实
WAP 页面 URL 规范:
URL 路径的第一级
必须是 /m/
为什么?
WAP 站的双版本策略:
WAP 站双版本如何共存?
后端的 “浏览器分级策略”
前提:系统要知道这是一个 WAP 页面!
URL 必须符合前面提到的规则!
但还是有些例外:
代发、充值成功……
市场活动、……
例外还是少一些吧!
浏
览
器
Routing
Controller
模板
(View)
HTML
URL
数据
htdocs/
└── controller/
├── Fabu_Controller.php
├── Fabu_WAP_Controller.php
├── Helpcenter_Controller.php
├── Helpcenter_WAP_Controller.php
└── ...
现有 Controller 文件:
与 WAP 相关的 Controller 规范:
URL 不同,自然可以 route 到不同的 Controller!
很多页面没有做到!可能是因为麻烦吧……
浏
览
器
Routing
Controller
模板
(View)
HTML
URL
数据
WAP 的双版本是如何实现的:
双模板
htdocs/
└── view/
└── wap/
├── home.jedi
├── home.mobile.jedi
├── listing.jedi
├── listing.mobile.jedi
└── ...
双模板是如何同时工作的?
ResponseData::createDefault($req)
->params($p)
->template('template-name');
Controller 并没有指定两个模板!
模板的查找机制:
'template-name'
+ '.'
+ variant 查找;'template-name'
查找'jedi'
、'jades'
、'jade'
htdocs/
└── view/
└── wap/
├── home.jedi
├── home.mobile.jedi
└── ...
ResponseData::createDefault($req)
->params($p)
->template('wap/home');
触屏版
老 WAP 版
'mobile'
'mobile.wap'
home.mobile.jedi
home.jedi
既然老 WAP 版已经不维护了,为什么还要为它准备模板?
foo.mobile.jedi
需要有一个 foo.jedi
foo.jedi
?模板的抽象方式 (Jedi):
Skeleton
继承
页面模板 B
页面模板 A
继承
模板的抽象方式 (Jedi 1.x):
Skeleton
多级继承
页面模板 B
子模板
包含
“中间层” 模板
多级继承
页面模板 A
多级继承
:import
skeleton.jedi
skeleton.mobile.jedi
skeleton-na.jedi
WAP 在用的 Skeleton:
老 WAP 版专用
触屏版专用
老 WAP 版
“空白页” 专用
WAP 模板规范:
htdocs/view/wap/
foo.jedi
foo.mobile.jedi
现有代码中存在例外吗?
例外还是少一些吧!
很多……
WAP 页面 URL 路径的第一级没有 /m/
?
死法一
Web 和 WAP 共用 Controller?
死法二
文件少不一定简单;但不一致肯定是复杂的。
Web Controller 不把移动设备的访问重定向到 WAP 页面?
死法三
没有把 WAP 模板放到固定的目录?
死法四
WAP 模板用 Jade 来写?
死法五
WAP 页面只用一个 foo.jedi
模板文件?
死法六
“宁可无,不可错”
WAP 页面只用一个 foo.mobile.jedi
模板文件?
死法七
写 WAP 页面不基于 Skeleton,直接写?
死法八
(稍后补充)
Thank You!