还你以自由

还你以自由.

我将尝试在 TypePress 中通过组织代码逻辑实现这个目标. (或许需要开发其他辅助工具, 这需要您的建议和贡献)

目录调整

Template

作者此刻甚至认为 完全没有必要更新新的功能了.

闭包很容易使用, 您需要什么功能参照闭包的方法自己实现就好了.

layout.html的样子

get.tmpl

架构轮廓

  1. 从中您应该可以看出, 所有的模块都尽量的分目录存储
  2. 对于WEB应用, 最主要的就是把所有的 Handler 都控制起来, TypePress 对所有涉及的流程都留下了扩展可能.(其实就是再包装一层)
  3. achun/template 中闭包的使用方法让视图获得了自由, 控制器只需要设定和一个content view file 即可.
  4. 的强大让控制器获得了自由
  5. gorilla/context 让数据绑定更巧妙灵活

执行流程

  1. 第一个 Handler 其实是 HandlerMux, 当时不知道写什么, 现在知道至少可以写 w.Header().Set("Server", "TypePress")
  2. 路由匹配失败会执行静态文件StaticFile方法
  3. 为控制器初始化对象, 此对象默认template是访问不到的. 支持控制器变换或者设定视图参数.
  4. 传递 *http.RequestfireBeforeFilter 实施控制器前置过滤
  5. 执行控制器 handler, 也就是路由的 HandlerFunc, 期间可以设定对象
  6. 传递 *http.RequestfireAfterFilter 实施控制器后置过滤,(也可以叫做渲染前置过滤)
  7. 计算视图相关文件位置, 并渲染视图
  8. 传递 *http.Request和渲染视图中发生的error 给fireEndRender 实现控制器完成观察者