我能够想象这是每一个开发员的梦想,只用写些纯粹的逻辑,而后一键提交上线。不用关心用什么框架,部署过程,配置等,仅仅关心你的业务逻辑,就像魔法同样。javascript
固然,我曾经也梦到过相似的。尽管我喜欢在docker里捣鼓,检出新颖的库和框架(毕竟我主要是写javascript),有时候遇到一个具体的问题我想快速构建解决方案。大多数这样的问题自己对它是不敢兴趣(或者比较困难)去解决。我须要花时间去解决它。css
从这个项目,你将开始考虑脚手架,让咱们看看如何建立一个新的项目?
为了简单起见,在这里我将所有使用Nodejs,而且我将用最新稳定的Nodejs版本。html
再说一次,为了简单起见咱们不会涉及到服务端渲染和一些新的东西。它只是个普通的REST API和一个独立的webUI 而已。java
咱们将从服务端和一个基本的REST API 开始 ,在你建立你的项目以前,让咱们先回答一些问题?node
用babel或es5足够好吗?或者typescript,flow ? 用all-in-one的场景react
Express,Hapi,Koa这些框架我会选择哪个或者其余的? 我会用哪一种数据库?Mongo,Redis,PostgreSQL?git
须要认证吗?我须要用一些库吗?Passport.js,仍是其它的? 你必须回答这些很是基础的问题。angularjs
假设你已经选好了。github
1.咱们将用babel.js的es2015和第二阶段特性,rest/spread和async/await,若是你不知道如何安装babel,请看这里的导读,它给了至关好的说明和概述,固然,你也能够用像generator-babel这么简单的。
2.咱们正在构建很是简单的REST API,因此咱们不须要一个成熟的场景像Meteor和Express.js。若是你不知道怎么安装Express项目,能够去看官方文档,文档很是好,但那些都不是咱们要作的。
3.从咱们构建REST API,咱们须要去处理POST,PUT,DELETE和其余,为了使这些简单,你将须要插件body-parser和method-override和其余的,好比logging,CORS,websockets,都是你须要的。
4.对于数据库咱们使用MongoDB,而且咱们将用mongoose来操做mongoDB,若是你是最新的系统,安装mongo不会很难,你的APP一样适用于mongoose,这一部分很简单(你须要的话你也能够不定义schema)。
5.最后,咱们须要passport.js认证,幸运的是,这个很是简单,更多的工做将在你的DB和schema去认证。
最后!咱们完成了一个REST API的项目,如今咱们须要些许多业务逻辑,咱们还须要web UI!
让咱们想象你已经花费了几天时间去完成你的基础REST API,很是好,充分的测试(你已经掌握了用单元测试),各类log而且都是这一切都是你想作的。如今是时候去构建一个你想要的webUI 了。
再说一遍,在你建立你的UI项目以前,咱们必须回答下面的问题。
以哪一种浏览器来适配?我须要支持IE8吗? 再说一遍,用babel和es5够好吗?或者其余的type-script 或者 flow?
须要模块打包吗?WebPack,jspm,rollup?
须要css框架吗?Bootstrap?Foundation?Material Design Lite?Semantic UI?
再说一遍,你必须回答这些基础的问题。
假设你已经选好了。
咱们有个客户用的最新的浏览器,因此咱们只用兼容IE11或者最新的。至关酷,flexbox就支持。
再说一遍,咱们将用babel。
打包模块,自从webpack提供了许多漂亮的(css modules)让咱们不在花费更多的时间去作这些,若是你不知道怎么去使用它,这里有教程,能够花些时间去熟悉这些。它最有价值的就是它各类加载器!
选择一个框架,若是你不太熟悉这块,能够看看decent overview。咱们将继续使用React.js,由于我喜欢它。设置一个基础的React app很是明确。你须要routing。若是你想开发更有效率,你能够用hot reload。
这一部分比较娱乐,底层库与架构!若是你有时间的,我明确鼓励你去尝试一些新的,去学习不少东西。可是,为了简单咱们选择经典,flux,很容易安装,使用起来很是明确,还有许多很好的特性。
对于css框架,咱们继续使用BootStrap。每一个人都喜欢BootStrap,而且用在React中也挺好的。在项目添加一个a.css的文件。
咱们已经完成了在项目中建立咱们的web UI.如今咱们只用写业务逻辑了。
我很容易理解为何许多都不喜欢用javascript在生产环境中。有些人称它为javascript疲劳。对于开发者来讲不停的学习是每一个人都应该作的,这的确是正确的,不幸的事,实际中不可能老是给你足够的空间去适应属于你本身的步调。每每你须要把任务在一周里去分解,这个问题解决的方案是哪些?
极可能,一般最好的办法是去学习一种用脚手架和bootstrap任务去推进开发进度。一般容许开发者专门深刻学习全部部分和工做速度相对较快。若是开发者熟悉CI/CD,他们能够设置自动测试和自动部署。问题是,即便利用脚手架仍然须要花费不少时间去作。
另外一种方法,在过去几年已经获得了认同,Pass服务。虽然它们没有消除决定去学习新的东西,一般来讲它们对开发者来讲比较容易,仅仅看看AWS的这些库!更多的时间最终在老的系统,构建和开发。
我尝试作了这些,而且它们运行挺好的,可是明显的有不一样的负面问题。从这里,构建了另外一个平台对于数据驱动应用demo,我开始考虑会有更好的方法吗?更快速更容易的方式?是否能够构建一个通用的平台帮助咱们解决相似的案例?是否用这个构建一个APP不用花一天时间,只用几小时就成?
这些想法咱们着手构建一个平台,将使构建数据驱动的应用程序。若是你看过不少应用,你能够很容易的把它们分为3个部分:
来源 ——这些是获取或者生成中获得的数据
一个或多个处理器 ——影响数据发生改变产生的反应
渲染——显示你的内容
若是你怀疑你能够看一些APP,这里有几个例子。
用微博来分析情绪的产品
从Twitter Firehose获取数据,分析这些情绪,渲染一个经常使用表格展现总结情绪
slackbot
从slack获取数据,处理器是个函数,好比用google搜索,另一个处理将搜索的结果返回到slack,而后在控制台渲染所有请求和响应。
聊天APP
从用户获取信息,处理器不须要作什么,UI展现了输入框和信息。
还有更多,你懂的。若是我不得不正式描述这个逻辑,它看起来就像这样:
const processors = [processor1]; // or more, or none // classical FP compose function // see, e.g. http://ramdajs.com/0.19.1/docs/#compose const app = compose( render, ...processors, source, );
很酷的是这些就是所有的东西,source,processors和render,都是些普通的函数。这意味着咱们建立一个平台容许咱们很容易的重复使用它们。只不过这些函数都是同步的,若是咱们想有些异步的操做呢?这里提供了RxJS能够解决,跟写同步代码是同样,下面是用RxJS的逻辑代码。
const app = Rx.Observable .create(source) .flatMap(processor) .subscribe(render);
我有种上当的感受,由于咱们不能使用彻底相同的函数在前面的代码片断上。Source函数必须利用Observer里的create方法。而且Processor必须返回flatMap替换一个值。但添加了这些细微的改变就能够容许咱们用异步函数,实在是很是漂亮。
我也对渲染函数施加了额外的约束,而不是返回HTML,它应该返回React组件,这样很容易UI是一个总体,加上咱们能够重用了 React组件不须要任何额外的hacks。
这些东西听起来并无很复杂?在一方面来讲,添加其余的库和抽象层老是增长了开发者学习成本。可是我认为这里的好处大于坏处,主要是由于咱们不在会考虑咱们前面所提到的问题了。让咱们仔细看看这些好处。
我前两个在上一节中已经提到过---对UI组件的处理器和易于集成的异步性。让咱们开始使用异步性。
未完待续。。。。。。
原文:https://medium.com/@yamalight/building-a...小弟英语不行,翻译的不当麻烦纠正下