每一家企业,都有自己的脚手架。首先脚手架是什么?脚手架是一个可以让我们快速堆建业务代码的框架。但是大多数的脚手架国内是什么设计的呢?
我以一个简单的例子,最直观的做法就是umi.js的这种配置约束做法,让开发者去安装规范去做事。我们是程序员,规范是一回事,但是业务是活的,约束是死的。你只定义了开发的规范和约束,然后让开发者去堆业务代码???一个框架只做到这里这一步是其实还不够完善!你看过express,koa,nest那里有规定过你这种约束?
什么是框架?
一个脚手架框架,不应该是umi.js用来约束打包的工具。在没有cli之前Vue和React只是一库,有了vue-cli后赋予了vue快速开发,但是Create-React-app还有很多东西需要自己去配置。所以Create-React-App不算一个好的脚手架,但它是一个自定义最好的脚手架。因为Create-React-App更提倡开发者更具自己的公司情况去配置自己的框架,而不像Vue-cli,Ng-cli,umi.js按照他们的约束来开发。
严格意义来讲很多脚手架都不算框架,只有Angular2-cli算一个框架。框架是一套提供了所有业务场景都有用的工具类开发集合。比如Spring boot加它的生态圈。虽然vue-cli也可以算一个框架。但是相比于angular2的体系来说真的差太多了。
国内的项目管理者都是如何管理自己框架呢?
首先真真去做系统框架的人,是少着又少。大多的系统设计师都是以下做法在官方提供的脚手架里面设定目录进行堆代码模式。先画个图让你们理解一下。
大概就是这样吧!通过文件夹来区分你要做什么。然后进行堆代码操作。项目做到后期越来越大了,文件夹存的东西越来越多了。最后结局还是回到屎山多了的堆积。
我们应该要如何去设计我们的框架?
我们这么设计有什们好处?首先系统有了上下文。我开发得时候模块之间可以更加灵活,我们开发的时候不需要全部东西都拿到进行开发,只需要在子模块进行开发完,合并到主模块进行加载即可。
可以参考这篇文章 [React-Router v4之后为什么不用config来管理路由?使用react-router新特性做模块加载吧]React-Router v4之后为什么不用config来管理路由?使用react-router新特性做模块加载吧 - 掘金 (juejin.cn)
思路很简单
为什么需要上下文,因为有了上下文我可以更好的再个个模块进行重写和依赖管理,比如一些操作。我可以切面的去修个我们的业务模块。
React利用HOC制作自己的模块依赖器,自动注入实现privides重写 - 掘金 (juejin.cn)
我们做一个框架,更多的考虑的是输入到输出的结果。再处理业务代码之前,框架前后可以做什么事情?
如果你用过Spring框架,了解过Spring框架。那么它框架里面有一个叫容器的东西,很多组件都是注入到这个容器里面。我们很多时候都是再容器里面取出我们想要的东西,进行通信交互。它的这个理念包括很多的框架都能体现到,包括著名node.js框架koa也是有一个上下文来处理request,response的结果。
可以看出一个框架的都有那些共性呢?你得有一个优秀的上下文管理器!!
并且提供扩展的注入方法,类似这样。
因为子模块内容你没有这个上下文管理器,你其他模块如何去调用呢?
容器returen的是接口,减少调用者的学习能力。在开发过程中,对code review。你只需要关注你想看的代码实现地方就好了。
因为view调用的都是一样的东西,至于底层要怎么实现是底层的事情。
就算后面底层实现方法改了。也不影响调用者的调用和学习成本。
今天的分享先这么多,希望大家考虑一下这个关系。因为这个系统是公司请我来写且不能公开,所以我只能把思路告诉大家。