一、概要
这篇文章不打算用很细致的描述来说明如何创建一个博客,而是从原理的角度来让有兴趣的人知道如何开始。(下文都是我自己从一个后端的角度来理解的,有些说法不一定准确,但是原理可以保证无误)。
具体可以参考我的博客实现:cool-blog 一个非常轻量级的博客实现
二、基础概念
短链接
浏览器每次查看页面的操作都是重新发起链接的,即是俗称的短链接。很显然,这是个无状态的过程。
路径/path
对于这样的一个地址 www.baidu.com/find,那么/find 就是我们的路径,一般解决路径的分发,我们称呼他为路由route
方法
浏览器的请求有很多种:
- get:请求,一般用于查询
- post:更新,例如表单
- put:创建,例如新建资源
- delete:删除
以上对四种方法的理解以及应用规范,可以参考restful api的设计,它将所有的网络页面(这里说法不够精确)都理解为资源,那么所有的操作都是对应于如何操作资源的。
查询
对于这样的地址www.baidu.com/find?a=1&b=2,那么问号之后就是查询,路径和查询构建成了地址中静态和动态的两部分(当然,使用的时候,不用拘泥于此)
消息体
客户端和服务端之间需要传递大量的数据,此时会放在http的主体中
模版
浏览器会根据服务端发回来的html代码正确的渲染页面,而模版则是解决"如何最省力的返回html代码"的方案。
cookies 和 session
对于服务端而言,客户端发起的每次链接都是全新的,那么服务端就没法做出状态来,而类似登陆这种操作是需要状态,解决这类问题的手段就是cookie和session。
cookies
- 存在于http协议中的cookie字段中,在每次的请求,浏览器都会补充上这个字段,传到服务端,然后服务端再传回来,整个过程就好像乒乓球一样,不停的来回
- 它用于伪造一个类似于长连接的标识,所以正常做法是只需要保存一个唯一的id既可以最大化使用,这样也可以减少网络传输的消耗
session
对于服务端而言,解决了长连接的概念,那很多东西都开始变得简单起来了。而session 可以理解为是服务端对于长连接的进一步具化,将cookie代表的长连接映射为一个对象,那么这个对象就可以拿来存放东西了。
两者结合起来的例子:登陆
- 用户第一次打开页面,此时服务端生成唯一的id存放到cookie中,此时对应的session开始产生
- 用户输入用户名和密码,服务端验证通过,此时可以将对应的用户id存放进去session
- 用户重新打开这个界面(或者任何需要登陆的页面),检查session是否存放了用户id,如果有那么允许,如果没有,那么跳转到登陆界面。
三、技术选型
基础语言
nodejs:这是后端的必然选择了
基本框架
koa:一个非常现代的后端开发框架,他的中间件的理念让我挺佩服的
模版
art-template: 腾讯出品,使用非常舒服
中间件(只列出重要的部分)
- 路由:koa-router
- cookies和session:koa-session-minimal
- 消息体:koa-bodyparser
四、架构设计
分层
复杂的层次会导致逻辑混乱,而在nodejs提供的底层已经完好的情况下,我们可以减少分层,例如 server + module 一共两层
组合
多使用组合可以减少层次的增加,更容易理解。为什么不使用面向对象的开发方法呢?因为要正确的使用面向对象,必须正确的抽象概念,而抽象能力不是每个人都具备的。组合的概念体现在架构中表现为模块:module
可见性
模块之间互相可见,他们是平等关系,而server层作为基础,都可以被模块调用
模块的数据以及实现
数据和实现的分离有利于划分职责,并且做热更新的时候更加自然(毕竟数据不可热更新,只有实现可以)
路由
路由的地位等同于模块,但是他和模块又有很多不一样的地方
五、文件架构
这里只是给出我自己的版本,没必要一定要按照这样的方式来写
- index.js:所有的文件夹都应该有这个文件,用于正确的require
- config:文件夹,里面存放了开发期以及发布后的配置
- content:存放一些上传的,或者是静态文件
- kernel:一些工具类的存放,和业务无关
- server:业务代码
- core:一些需要扩展到server层的代码
- data:存放模块的数据
- impl:存放模块的实现
- routers:存放各种路由
六、前后端分离
我理解的前后端分离应该是后端只考虑数据,前端只考虑布局,但是如果这样开发,为了可以有良好的seo,就必须将这两部分拼凑起来,再发给浏览器,开发比较繁琐,本文只是部分实现了
module/模块
只处理数据的内容
routers
在这里将布局和数据拼凑起来,发送给前端
七、整体规划
页面基本布局
- 上:导航
- 中:内容
- 下:底部
功能划分(只列出基础部分)
- 首页
- 文章列表
- 文章详细页
- 后台管理
- 登录
- 文章列表
- 添加文章
- 修改文章
- 删除文章
待补充
其实写到这里,有关设计方面的已经写完了,至于具体的实现则是后面再补充了。
网友评论