美文网首页程序员
[原创] 如何开发一个博客(更新中)

[原创] 如何开发一个博客(更新中)

作者: 土土先生 | 来源:发表于2018-11-26 19:27 被阅读12次

    一、概要

    这篇文章不打算用很细致的描述来说明如何创建一个博客,而是从原理的角度来让有兴趣的人知道如何开始。(下文都是我自己从一个后端的角度来理解的,有些说法不一定准确,但是原理可以保证无误)。
    具体可以参考我的博客实现: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

    在这里将布局和数据拼凑起来,发送给前端

    七、整体规划

    页面基本布局

    • 上:导航
    • 中:内容
    • 下:底部

    功能划分(只列出基础部分)

    • 首页
    • 文章列表
    • 文章详细页
    • 后台管理
      • 登录
      • 文章列表
      • 添加文章
      • 修改文章
      • 删除文章

    待补充

    其实写到这里,有关设计方面的已经写完了,至于具体的实现则是后面再补充了。

    相关文章

      网友评论

        本文标题:[原创] 如何开发一个博客(更新中)

        本文链接:https://www.haomeiwen.com/subject/gkliqqtx.html