你已经毁了JavaScript

你已经毁了JavaScript

(注* 之前我们比较过Angular.JS和Backbone,
作者以AngularJS为例,表明了他对JS领域过度使用设计模式的焦躁,言辞激烈,引起广泛讨论)

  以前


  过去我们在页面上用很时尚的方式写了一些确实很可怕的代码,它给我们带来了巨大的麻烦。可能很多人现在还在这样做,但他们不会看这篇博文,我们可以假装他们不存在。

  JS的伟大/了不起/让人惊讶的地方在于没有人想走近它,而且在那些有组织的大型企业中,他们只想呆在他们自己的小世界里,由各种抽象层和XML注入的框架中。

  这对于像我这样想要靠这些企业养活,但却不想忍受那由N多层次组成的可怕的“最佳实践”(而且他们会由于担心性能问题不想让非DBA的人动数据库)来说,这非常棒。

  更好的是,当这些性能问题出现时,通过写一段前端JS代码,我们可以转危为安。我们可以假装这些性能问题不存在,尽管后台代码很烂但能给用户一个好的体验。

  JS已经发展到顶峰

  当jQuery出现,这是更好的事。它能将可重复使用的jQuery插件紧密地连接在一起。当NPM面世,我们开始用一种半自动的模块系统来管理这些自包含的小部件,我们最终到达JS的顶峰了。

  由于这些小模块及其组合都是有独立功能和小部件,我设想着一个我能用良好的代码库,和出色的优秀的UI团队一起工作的未来。也许我们能从这些企业级的Bean,
Orm,各种抽象工厂、方法、模式中,慢慢地夺回代码库的控制权。

  我们有一些更有意义的事情需要做,写优秀的代码和构建优秀的框架,并能使我们从繁重的企业框架中解脱出去。

  你毁了它

  现在,我依然在用JS,但最近我主要还是在用Erlang,创建视频流/编码系统等等,现在我还没有把他们写成博客,但基本上我的后台很性感,我的前台也很性感(facebook的React+NPM填补了空白)。我在Stackoverflow上发现的一些东西,让所有以前苦难日子又重现了,让我惊恐的是,它像性病一样在前端传播,链接在这:

  Angular.js: Server vs Provider vs
Factory?

  好吧,还不算太糟,但让我们来看看投票率最高的答案(好吧,本文发表时就已经不是了)同时观察下它,很显然还是有一些非常满意的用户的:

噢!多谢详细的讲解。你把它变得很容易,让人易于理解。好样的!!

  如果我善良的话,我会说这个评论是讽刺的,且整件事就是"Pow 法则"很好的一个例子,但看完整个评论我觉得事情并不是这样的,我没有为此皱眉。

  因此,我们看到的第一件事是奇怪的Angular文档的引证,如下面这样:

Angular“服务”是由“服务工厂”创建的一个单例对象。这些服务工厂是函数,反过来,他们也是由“服务提供者”创建的。“这些服务提供者是构造函数”。当实例化时,他们必须包含一个叫$get的属性,它是服务工厂函数的关键。

  这TM到底是干什么玩竟儿?我是这样理解的“为了写了Hello World程序,你必须首先创建一个hello world服务来创建hello world工厂来创建hello world应用,这样你就可以在屏幕上输出hello world了”。

什么??我是在读论文吗?这玩意儿真让人凌乱。

  不,你不是在阅读论文,显然你在阅读angular文档。

  如果这是一篇论文,那么它会试着陈述一些问题的解决方案,而不是给编造出来的问题编造答案(实际上,这不太正确,因为学者们都活在他们的世界里)。

  可能大多数创建Angular的情景都是编造的,因为这是我们竟会在前面需要所有这些工厂,代理,服务的唯一原因。这些我们将要使用的代码和说明都来自于幻境,且让人难以相信,这居然不是一个玩笑。

服务,工厂,提供者可以是相同的。

  什么?这当然不可以,他们仅仅只是有返回值的函数,让我们继续跟随这疯狂的文档来看看它会发展成什么样。

  作为前提,我们得到了一个“汽车实例化”的例子。

通过服务(单例的),你不能实现它,因为不允许被实例化。

  为了证明提供者的存在,因为

要实例化,你需要工厂(Factory)或提供者(provider)。

  不!天哪,这什么玩意儿。

var car = new Car({ cylinders: 4 })

  奇怪的“new”关键词。我们在企业级应用中一直在重复这个参数,看到它又出来了,这真的羞辱了我。

Provider能帮你配置应用程序

  当然,如果我们需要配置应用程序时,我们可以通过(Provider)配置。但我们怎么配置那些配置应用程序的配置程序呢?

  我喜欢下面的代码,它几乎在重复它自己。它甚至不需要评注就就已经很搞笑了。

app.service(‘CarService‘, function () {

this.dealer = "Bad";

this.numCylinder = 4;

});

app.factory(‘CarFactory‘, function () {

return function (numCylinder) {

this.dealer = "Bad";

this.numCylinder = numCylinder

};

});

app.provider(‘CarProvider‘, function () {

this.dealerName = ‘Bad‘;

this.$get = function () {

return function (numCylinder) {

this.numCylinder = numCylinder;

this.dealer = this.dealerName;

}

};

this.setDealerName = function (str) {

this.dealerName = str;

}

});

  为了配置它,我们要做的就是

app.config(function (CarProviderProvider) {

CarProviderProvider.setDealerName(‘Good‘);

});

  Hey,这只是一个配置而已——不需要改变任何代码!!

  我宁愿写一段相同的原生JS来充实自己,上面的例子简直让我想找个地洞钻,拿头撞墙。

  这儿有个小窍门。如果你发现你自己也问同样的问题。如果你发现自己问一个像这样答案的问题,然后此类问题会被问道你已经做错了。

  做错这个本来没有什么羞耻的,这没问题——我们都会犯错,但是给出当前这个扯淡的轨迹,我们已经远离我们之前的想法了,我们会成为Angular的顾问,且给我们的学生去上Angular昂贵的培训班。很好——你爱上它了。

  你们怎么回事?

  我们有美好的东西,你们毁了它。我们有荒唐企业版的出路的,且你不是去学习如何玩弄代码,你只需要让这些Provider/
Factory休息一下,然后把事情做好(不钻研)。

  去你们的,我要回家了

  没事,实际上我不会再做企业级的东西了。我将问题和答案展示给我的同事们,对于你的付出我们都觉得很好笑,因为愚蠢得简直太好笑了。但是你知道吗?当你们都停止挖这个坑的时候,你们会发现这个坑看起来到底有多深,我会站在外面大声嘲笑你的,因为这还是你自己的错。

  开始为自己着想,亡羊补牢为时未晚且学会写一些实际的代码。信息就在那里,你可以做的。如果你需要掌握Factory,Factory
Provider和Service
Provider(各种模式,框架,服务)然后意识到这个世界并不需要你的代码,然后去找一份你确实在行的工作。不要再祸害我们剩下的人了。

  原文 codeofrob.com

来源: <http://www.admin10000.com/document/4301.html#jtss-tsina>

你已经毁了JavaScript,布布扣,bubuko.com

时间: 2024-10-25 07:31:51

你已经毁了JavaScript的相关文章

不要再使用JS框架了

原文:No more JS Frameworks byJoe Gregorio 停止编写Javascript框架吧. Javascript框架就好像死亡和税收一样:终究不可避免它的存在.我确信如果我是那面墙上的一只苍蝇,每次有人开始一个新的网页项目时,第一个问题肯定是我们用的是哪个JS框架?这就是当今业内对JS框架的根深蒂固的思维模式.但事实上并不需要如此,相反的,需要停止使用JS框架. 我们来看看我们都有些什么. Angular.Backbone和Ember,哎哟妈呀 很长一段时间内网页平台.

利用 JavaScript 快速切换正体中文和简体中文

一般商业网站都有一个语言的需求,就是为了照顾使用正体中文的国人,会特地提供一个切换到正体中文的选项(或曰"繁体中文").传统做法是在服务端完成的,即通过某些控件或者过滤器转换文本语言.这里笔者介绍一种简单可行的方法,不是在服务端而是利用前端的 JavaScript 就可以切换正体中文. 大概六年前我还专门写过这议题的博文,这篇也是奠基在那篇文章(旧文也是参考了一高手代码)之上,<对 JavaScript 繁简字切换的小改进>.时过境迁,有必要把代码进行更新一下--以前的太稚

2015-6-8 用javascript+ Java+md5解决http协议下,用户登录明文传输密码问题

不应该说是前段时间了,就最近吧,发现公司有一个系统用的还是Http协议,当时就想了,现在都用https协议,有证书的那安全大很多啊 ,还用http不会连加密都没有吧,找了一番,果然如此,别说是传输加密了,就连后台保存到数据库的密码都没有加密,本着闲的蛋疼的想法(主要是公司大部分是业务,感觉想跳啊),于是一个毁(无)天(聊)灭(之)地(极)的计划就这样诞生了,咳咳... 好了不废话,下面说下简单的思路: 用户登录页面,获取到用户密码,用MD5加密,然后进行传输,服务器端获取的是一个加密过的密码.然

PHP+JavaScript+HTML实现上传PDF和浏览PDF课件

在寒假简单制作PHP网站时,需要实现在线浏览PDF和上传PDF的简单功能,下面就简单介绍下该功能.实现效果如下图所示: 1.当用户登录后,点击"上传课件"超链接可以实现隐藏和显示上传table的功能: 2.当用户选择上传的课件后,PDF上传至本地网页文件夹下,同时插入数据库: 3.当点击相关PDF教学课件后,可以实现在线浏览功能. 网站布局参考:PHP网站使用JavaScript和Iframe简单实现部分刷新效果 一. 隐藏/显示table 首先介绍如何通过JavaScript实现点击

3种创建、调用JavaScript对象的方法

hey you guys,两个月没有写技术博客了.作为一名有理想.有抱负的程序员,两个月不写技术博客,真该打.业精于勤,荒于嬉.行成于思,毁于随.勤奋是必不可少的,今后养成一周至少一篇博客的习惯.好了,不瞎扯了,书归正传.  今天在做项目时,遇到了需要创建JavaScript对象的情况.所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码.感觉方法挺好的,在这里与大家分享一下. 一.利用函数创建对象: //定义对象 function Animal(type)

写好你的JavaScript

关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 在实际工作中,我们应该经常会看到一些功能上没有问题,但编码风格和规范却十分糟糕的代码,这往往会让人不敢再往下阅读,甚至会影响阅读者一天的心情.这些代码不仅不易阅读,而且难以维护,它们一般会出自刚入门的编程新手,也会出自工作了好几年的老程序员手下.因此本文的目的在于帮助那些没有养成良好的编码风格,缺乏相应编码规范意识的JavaScript学习者们改善他们的编码形象. 编码形象 以上我提出了编码形象的

JavaScript 使用穷举方式实现内容简繁转换

场景: 在Web开发中,有时存在对内容进行简体和繁体互相转换的需求,这时我们可以参考以下做法. 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content=&qu

如何编写可维护的面向对象JavaScript代码

能够写出可维护的面向对象JavaScript代 码不仅可以节约金钱,还能让你很受欢迎.不信?有可能你自己或者其他什么人有一天会回来重用你的代码.如果能尽量让这个经历不那么痛苦,就可以节省不少时 间.地球人都知道,时间就是金钱.同样的,你也会因为帮某人省去了头疼的过程而获得他的偏爱.但是,在开始探索如何编写可维护的面向对象JavaScript代码之前,我们先来快速看看什么是面向对象.如果已经了解面向对象的概念了,就可以直接跳过下一节. 什么是面向对象?  面向对象编程主要通过代码代表现实世界中的实

译|调整JavaScript抽象的迭代方案

原文作者:Kaloyan Kosev 原文链接:https://css-tricks.com/adapting-javascript-abstractions-time/ 翻译译者:小溪里 校对:华翔.小冬 即使还没有读过我的文章<在处理网络数据的 JavaScript 抽象的重要性>,你也很有可能已经意识到代码的可维护性和可扩展性很重要,这也是介绍 JavaScript 抽象的目的. 为了更加清楚的说明,我们假设在 JavaScript 中抽象是一个模块. 一个模块的最初实现只是它们漫长(也