从事web开发已经10年时间,近几年也一直从事微博应用产品的研发。从原生php写网站到使用cms bbs整合的大型站点,从使用各种流行的开源开发框架到成熟稳定的平台级框架下做研发。这期间对应用型web开发框架设计有一些自己的理解和见解,在这里和大家一起分享交流一下。

为了让大家对框架的各个模块有较深的理解,我对模块职能角色匹配了三国人物,在这里纯属为了增加大家的趣味性理解,如有不同见解可以在后面使劲得拍砖:)。

一个较成熟的框架图如下:

三国人物和各个模块角色匹配如下:

一、单一入口(index.php)---门神关羽

一夫当关、万夫莫开。这也是为啥诸葛亮把关羽安排在荆州这个战略要地的原因。因为所有的请求都得经过它。它对请求安全、框架整体型起到至关作用。

二、路由(Router)--引路人徐庶

徐庶的成名之作就是把诸葛亮引荐给了刘备,从此使刘备的事业蒸蒸日上。其实这里最主要说说他的“引路”的作用。一个项目的代码往往要承载各种的业务职能(PC、H5、Api、Manage等等)需要。部署肯定是只有一个物理目录,只不过需要配置不同的主机头和别名,或者同一个域名下Uri 需要映射到不同规则的Controler。引路的路由模块对系统的迁移升级和适应业务扩展起到关键作用。但同时提醒一下,这个地方也是经常是因为变更而导致线上故障问题点。所以设计时保持大模块划分下,细节尽量保持简单

三、控制层(Controler)--掌柜曹操

曹操就不需要过多文字对他画像了。识人、决策、控制这些是Controler工作职能三要素。首先它要对所有的(GET、POST)传入参数做验证,安全过滤、合法性(识人品),然后进行业务判断(决策)、需要调用哪个业务方法(控制),最后响应按不同格式输出(json、html、二进制)。基本干这些活就够了。大体上就是客户带着买卖来了,掌柜的先看看人咋样,人靠谱、具备买卖达成的条件、前柜收钱后柜出货,买卖成交。这一层注意的地方就是不要有太多的业务逻辑在里面否则后柜的业务模型层的诸葛亮会很尴尬,搞的自己一堆业务逻辑在里面,代码看起来很混乱,基本是自己找累。所以设计控制层一定要明确自己的三个职责。

四、业务模型层(Business Model)--劳模诸葛亮

Business Model 这个职能非诸葛亮莫属,诸葛亮在三国演义中绝对是一位日理万机的劳模。整个项目的业务里外大小事务均得有它来完成,所以这一层需要对各种的业务需求有深刻理解后再进行代码编写,写好的类与函数既要抽象可重用也要满足不同的业务场景需要。对于这一层虽然抽象和重用很重要,但是最重要的是条例清晰阅读性好。产品需求变更和开发人员的变化在这一层体现非常明显。

五、表示层(View)--战神吕布

这一层基本是模板渲染了,有很部分框架使用smart模板,也有部分框架使用自己的模板语法。微博目前使用的是yaf框架模板引擎,它书写语法是和原生php编写是一样的,书写起来直接简单,性能也超优,值得推荐给大家使用。

六、异步处理(Queue、Cron)--幕后英雄赵云

大型网站特别是像微博这样高并发请求的产品。异步处理肯定是必要的,运行方式有两种:1、队列处理、2、定时任务执行。赵云经常是在诸葛亮授意下默默的去完成一些看不见但又是绝对重要的任务。这块应该有注意二点:队列监控、日志收集。它们对线上提前发现问题和解决问题提供有力的保障。

七、接口层(Api)--外交官鲁肃

一个平台级产品在技术支撑上部门和人员需要拆解,每个部门和每个业务都会有自己独立的服务模块。他们之间是需要相互依赖、相互调用的,友好、桥梁这就是鲁肃外交官的作用,同是也是接口层(Api)设计的理念和原则。作为项目自身Api层的编写需要内接口声明和注释说明清晰、对外需要保证双方的调用稳定性。孙、刘两家联合据曹鲁肃功不可没。

八、数据层(Data)--后方夏侯敦

兵马未动,粮草先行。在我每次启动新项目研发时有个习惯:就是首先把数据层设计封装好。存储类型选择(mysql、redis、其它),如何分库、分表,缓存的策略和命中率评估、crud接口设计。数据层质量高低对以后需求变更和系统扩容影响很大,同时它也是强有力的后方保障层。

九、缓存层(MC)--良将张辽

张辽是一位不可多得良将正如Memcach读写性能一样。这一层基本和数据层统一做设计和规划,除了数据库数据缓存、也可以做接口缓存、业务数据缓存。但每份缓存最好有统一的更新和清除接口,虽然多谢几行代码但管理起来很方便。

十、通用类库(Class Library)--谋士郭嘉

郭嘉也算是谋士智囊团的代表人物。各种的类库都可以放在里面例如:DB、MC、HTTP、字符串处理、安全过滤、类型转换、登录验证等等。

经过了人物演义后形成如下阵型结构:

阵容队形精英组合在三国打天下也无敌了,哈哈......

聊完了演义,最后还想和大家分享一下我对一款优秀的WEB开发框架特性理解和期待,总结有几点:

1.框架结构清晰、书写代码简单易上手

2.框架定义规范,降低出错的概率

3.良好的可运维性

4.对第三方友好兼容

5.性能优越

6.强大功能集成

总之,“人力”和“电力”是互联网公司最大的成本,一款优秀的开发框架可以把这两个指标降到最低,并且让每位程序员工作身心愉悦、编程能力神速提升,同时公司方面也能有很多的技术沉淀和积累。一举多得、各方受益,岂不美哉。

应用web框架模块设计三国演义篇--转至微博的更多相关文章

  1. [转]轻量级 Java Web 框架架构设计

    工作闲暇之余,我想设计并开发一款轻量级 Java Web 框架,看看能否取代目前最为流行的而又越来越重的 Spring.Hibernate 等框架.请原谅在下的大胆行为与不自量力,本人不是为了重造轮子 ...

  2. Web框架之Django基础篇

    Web框架之Django基础篇   本节介绍Django 简介,安装 基本配置及学习  路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一 ...

  3. 09 基于模块wsgiref版web框架

    09 基于模块wsgiref版web框架 模块引入 真实开发中的python web程序,一般会分为两部分:       服务器程序:负责对socket服务器进行封装,并在请求到来时,对请求的各种数据 ...

  4. Node.js Web 开发框架大全《路由篇》

    这篇文章与大家分享优秀的 Node.js 路由(Routers)模块.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  5. Node.js Web 开发框架大全《中间件篇》

    这篇文章与大家分享优秀的 Node.js 中间件模块.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处 ...

  6. Web框架的引入

    为什么会有web框架 有了上一篇内容,静态.动态web服务器的实现,已经掌握了客户端请求到服务器处理的机制.在动态资源处理中,根据请求 .py 导入模块应用,然后调用应用入口程序实现动态处理.但是在真 ...

  7. go-zero之web框架

    go-zero 是一个集成了各种工程实践的 web 和 rpc 框架,其中rest是web框架模块,基于Go语言原生的http包进行构建,是一个轻量的,高性能的,功能完整的,简单易用的web框架 服务 ...

  8. “脚踢各大Python Web框架”,Sanic真有这能耐么?

    在Github上,Sanic第一句介绍语就是: "Sanic is a Flask-like Python 3.5+ web server that's written to go fast ...

  9. 第二百五十六节,Web框架

    Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 举例: #!/usr/bin/env python #c ...

随机推荐

  1. HDU4647+贪心

    /* 贪心. 题意:给定一些点 一些边 点和边都有价值.现在A B 选点.求A-B的maxVal 思路:分割边.边的1/2分给两个端点. 如果这两个点被同一个人取,则ok:否则 做减法也行,对题意无影 ...

  2. SQLite入门与分析(二)---设计与概念

    写在前面:谢谢各位的关注,没想到会有这么多人关注.高兴的同时,也感到压力,因为我接触SQLite也就几天,也没在实际开发中用过,只是最近项目的需求才来研究它,所以我很担心自己的文章是否会有错误,误导别 ...

  3. IMX51启动模式

    相关链接: http://blog.csdn.net/kickxxx/article/details/7236040 http://blog.csdn.net/evilcode/article/det ...

  4. 【HDOJ】4370 0 or 1

    挺有意思的题目.注意等式的条件.等式1实际表示点1的出度为1,等式2实际表示点2的入度为1,等式表示其它点为中间点,入度和出度相等.很容易转换成一条最短路.spfa直接可求,C即为邻接矩阵.同时,可能 ...

  5. get mac 20150202

    getmac.sh #!/bin/sh cat oui.txt|sed -e :a -e '$!N;s/\n\s/=/;ta' -e 'P;D' | sed 's/(hex)\+/=/g' | sed ...

  6. c++ 头文件 及 sort

    c++  sort :http://www.16kan.com/post/997260.html http://wenku.baidu.com/view/e064166daf1ffc4ffe47ac6 ...

  7. bzoj3156

    斜率优化dp,比较裸 注意int64的运算 ..] of int64;     i,n,h,t:longint;     x,y,z:int64; function g(j,k:int64):doub ...

  8. apache开源项目--Shiro

    安全是企业应用中不可缺少的功能,在众多权限框架中,Shiro(其前身是JSecurity)因其简单而又不失强大的特点引起了不少开发者的注 意.随着Grails的关注度越来越高,在Grails社区也出现 ...

  9. Oracle Data Guard

    DG 是 Oracle Data Guard 的简称.也就是Oracle11g的 数据卫士. 由于在工作中 Oracle和 SQL SERVER2008 同时都需要维护管理.给我的感觉这里的 DG 其 ...

  10. MS-SQL索引类型

    一.索引的概念     索引就是加快检索表中数据的方法.数据库的索引类似于书籍的索引.在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息.在数据库中,索引也允许数据库程序迅速地找到表中的 ...