初级会员
  • 第 16150 位会员
  • jarlyyn
  • 2018-02-09 18:28:04
  • Offline
  • 22 89

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • #3 @fancyecommerce 不管用那个语言,你划分业务模块和包的方式看来都有问题。 以你的例子为例,实际上, 订单,产品,购物车压根是很独立的三个模块。 基础包不也是用来放这些乱七八糟的东西的。 给点提示: 以你的项目为例。你需要确定最小的通用概念,做成interface。 以常用的电商模块来说,基本是 1.用户。 2.产品(id,sku,price,是否可售) 3.用户提交原始信息 然后基于这些抽象的借口再写具体的实现。 以我之前写的php电商代码为例。 产品属于shop模块,订单属于payment模块,购物车属于前端自行解决的部分。 base模块提供了基础用户,基础流程和基础流程状态基础流程模块的概念。 基础包是用来引入概念由其他模块来实现的,不是用来放业务代码的。
  • 要么引入interface,要么你还需要更基础的包
  • #4 @silsuer 我自己是做了一套web库,互相低依赖那种,更接近于Gorilla middleware的话在 https://github.com/herb-go/herb/blob/master/middleware/middleware.go 其实主要灵感来自 https://github.com/urfave/negroni 自己做了个Router的interface,然后做了一个httprouter的interface。 https://github.com/herb-go/herb/blob/master/middleware/router/httprouter/httprouter.go 因为当年踩过大而全的框架的坑,所以自己的代码,大部分代码都是可替换的,router也是。 然后我的架构应该和你的不太一样,所以参考价值不大。 但核心应该一样,也就是把middleware和最后的实际的控制器代码组成一个http.handler,在router适配后调用。
  • ………… 为什么要支持中间件会需要改router。 中间件不是一般是在router的handler之后的么…… 就是要靠不同路由加载不同的中间件啊。 摘我自己博客的一段代码为例 Router.StripPrefix("/site"). Use(HTMLMiddlewares...). Handle(RouterHTML) Router.StripPrefix("/api"). Use(APIMiddlewares...). Handle(RouterAPI) Router.GET("/"). Use(HTMLMiddlewares...). Use(caches.PageCacheIndex). HandleFunc(cmsactions.Index) Router.GET("/index.php"). Use(HTMLMiddlewares...). Use(caches.PageCacheIndex). HandleFunc(cmsactions.Index) 挂载中间件的是另一个用来实现中间件的组件,本身是一个http.handler。 所以就如httprouter的readme所说,router根本不需要负责中间件。你自己的中间件系统需要法则把自己打成一个http.handler,然后再交给httprouter. 使用httprouter的时候的确需要封装不少东西,但是和middleware无关啊……
  • 直接用全局变量