从事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. 推荐牛X的一本JS书

    主要是看阮一峰的教程时,他参考书目里有这一本中文的, 找来一看,果然高.. 练习一下. function Base(name) { this.name = name; this.getName = f ...

  2. hdu 3544 Alice's Game 博弈论

    博弈论+二分! 后一人会尽量选前一人切小的一块切!! 代码如下: #include<iostream> #include<stdio.h> #define I1(x) scan ...

  3. highcharts 根据表格转化为不同的图表

    <!doctype html> <html lang="zh"> <head> <meta http-equiv="Conten ...

  4. Eclipse中安装使用SVN

    参考网址: Eclipse中使用SVN - 流逝的是岁月,沉淀的是经典 - 博客频道 - CSDN.NET http://blog.csdn.net/v123411739/article/detail ...

  5. 202. Happy Number

    题目: Write an algorithm to determine if a number is "happy". A happy number is a number def ...

  6. Trainning Guide, Data Structures, Example

    最近在复习数据结构,发现这套题不错,题目质量好,覆盖广,Data Structures部分包括Example,以及简单,中等,难三个部分,这几天把Example的做完了, 摘要如下: 通过这几题让我复 ...

  7. 对Cost (%CPU) 粗略的理解

    今天研究执行计划,看到执行计划里面有Cost (%CPU),我这边研究了一把,不知道对与否,拿出来晒晒 在Oracle 10g中,Oracle 把CPU的cost也统计在执行计划中去了, 这和以前的8 ...

  8. hibernate缓存:一级缓存和二级缓存

    1.什么是缓存? 缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能.Hibernate在 ...

  9. xss(跨站脚本攻击),crsf(跨站请求伪造),xssf

    我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...

  10. 【转】 COCOS2D-X之使用CURL下载图片的一个简单Demo

    #include"curl/curl.h" #pragma  comment(lib,"libcurl_imp.lib") bool HelloWorld::i ...