初探ReactJS.NET 开发

ReactJS常常也被叫做"React",是一个恰恰在本场游戏中出场的新手。它由Facebook制造,并在二〇一三年首次发表。Facebook认为React在拍卖SPA难题上得以变成Angular的替代品,因而一旦您觉得Angular和React那三种框架是竞争对手,那您的敞亮就对了。可是,与Angular比较,React最大的分裂之处在于,它是一个更迅捷、具有更高性能、速度更快的类库。下图突显了动用React、Angular、Knockout(另一系列库,在本文中不做探究),以及纯粹的JavaScript在DOM中渲染包括1000个内容的列表,各自所需的年月:

不可以记住过去的人,被判重复过去。          --《程序员修炼之道》

哲学 1

  那句引言,平素被我用作座右铭,当在书中读到那句的时候,感触颇深,也是自我打算初始写博客记录生活的发端。跟那本书的机缘巧合,来自于事先公司的一个学长,他看完了,我便借来看了。
  在序章中观察千千万万讴歌,我很担心那本书又是有些把技术作为禅宗佛学讲道的废话,看了有的的时候,通晓到这本书涵盖程序员成长进程中和软件开发中必要小心的地点,从程序员的民用经济学到编码进程的各类环节,再到团体的序列管理,从程序员怎么样增添知识,如何思考难点,怎样运用有效工具创制个人条件,到项目启动从前怎样树立部分基本准则,如何分析、设计、编写、测试、重构,如何落成自动化,甚至是体系社团中加强实效的规则,编程是一门手艺,那样的手工业者精神更是一遍五遍感化着自身幼小的心灵。

来源: The Dapper Developer

重视实效的程序员的多个性状

Care About Your Craft
关心你的技术

  编程技术就是程序员的手艺,你的次第就是您的艺术品。时刻关怀自己的技术,保持热情、保持好奇,争取达成所有专长而又多才多艺。
  关于程序员那个工作,引用@左耳朵耗子的一段新浪:没哪个行业能像电脑行业这么活跃、刺激和有趣了。不仅是新兴工业革命的主力,又渗入到具备的行当中,干一辈子值了。//@_你亲热的偏执狂:
程序员首先是工程师,Professional,就跟律师,医务卫生人员一样,给大家解决难题;可是另一面吧,又是音乐家,创立新奇好玩的东西。那样的事情做一辈子有如何难点?

Think! About Your Work
思维!你的办事

  就算软件开发是工程学,但各样程序员并不是螺丝,而是活跃的造血细胞。大家要思想须求,推敲设计,展望愿景,打磨细节;大家要研商倘若进步工作效用,怎么着成长;在对权威暴发思疑时,大家又要批判的想想而不茫然接受。除去工程技术以外,逻辑思维能力才是程序员的骨干竞争力,保持活跃、费劲的思索。

假如您的运用越发敬重性能,那么React就是毋庸置疑的选项。也就此,在当年的2015
AngularJS琢磨会也有提及,两者可以相互结合,让总体网页性能更进步一步。哲学 2

自家的源码让猫给吃了

  按照你的饭碗发展、你的档次和你天天的办事,为您自己和你的一坐一起承担那样一种传统,是重视实效的工学的一块基石。器重实效的程序员对他或他自己的职业生涯负责,并且不害怕认同无知或不当。那自然并非是编程最让人快乐的上边,但它自然会发出——固然是在最好的档次中。固然有彻底的测试、卓越的文档以及充分的自动化,事情如故会出错。交付晚了,出现了没有预知到的技巧难点。
  发生这么的事务,我们要设法尽可能职业地处理它们。那象征诚实和坦白。大家可以为大家的能力自豪,但对此我们的老毛病——还有大家的愚蠢和我们的错误——大家必须诚实。

Provide Options, Don’t Make Lame Excuses
提供各种采用,不要找蹩脚的借口

  那段对义务的叙说并不只适用于程序员,但程序员可能会有和好的通晓。面对历史遗留难题,是奋勇向前化解或者马耳东风?难点暴发时,是平静担当依然去blame是猫吃了您的代码?

Sign Your Work
在你的文章上签字

  过去一时的手艺人为能在她们的著述上签署而自豪。你也应有那样。“那是自己编写的,我对友好的做事负担。”你的签名应该被视为质料的有限帮忙。当人们在一段代码上见到您的名字时,应该希望它是可看重的、用心编写的、测试过的和有文档的,一个确实的正统创作,由真正的规范人士编制。
  关于签名大家已经在代码规范中推行过,在类的头文件中参与类似上面的表明。有签署在对团结是鞭策,其他工友也易于找到您问问难题

//------------------------------------------------------------------------------//// 版权所有(C)被猫吃了技术有限公司保留所有权利//// 创建者: 被猫吃了// 创建日期: 2013-9-11// 功能描述: 被猫吃了////------------------------------------------------------------------------------

有兴趣者可以参见上边Demo
Code:https://github.com/djsmith42/angular_react_directive_example

软件的熵

  熵是一个出自物法学的定义,指的是某个系统中的“无序”的总量。当软件中的无序增进时,程序员们誉为“软件腐烂”(software
rot)。有为数不少因素可以促生软件腐烂。其中最重点的一个如同付出项目时的心理(或文化)。

Don’t Live with Broken Windows
决不容忍破窗户

  不要留着程序中的“破窗户”不修,低劣的安插,临时的不好的方案等等。而频仍我们又面对重视重的“现实”,没时间重构,重构风险大没资源测试。不过大家会永远生活在“现实”里面,不能有某一天万事具备、良辰吉日等着让你从头起先去弥合那么些“破窗户”。大家可以借助自动测试等招数来扶持我们下降风险。如若真的无法立即修复,请一定要完结:把发现的“破窗户”记入TODO
List,并且定期Review它

灭火的故事:
  作为对照,让大家描述Andy的一个熟人的故事。他是一个富得令人讨厌的巨富,拥有一所完美、赏心悦目的房子,里面满是价值连城的古董、艺术品,以及诸如此类的东西。有一天,一幅挂毯挂得离他的卧房壁炉太近了某些,着了火。消防人士冲进来救火——和他的房屋。但他们拖着粗大、肮脏的消防水管冲到房间门口却停住了——火在巨响——他们要在前门和着火处之间铺上垫子。
她们不想弄脏地毯。
  那诚然是一个最为的例子,但大家务必以如此的不二法门相比软件。倘若你发觉你所在公司和项目标代码至极不错——编写整洁、设计精良,并且很优雅——你就很可能会充裕小心不去把它弄脏,就和那么些消防员一样。尽管有火在巨响(最终时限、公布日期、会展演示,等等),你也不会想变成第二个弄脏东西的人。

 

双重的迫害

  给予总括机两项自相争辨的知识,是James T. Kirk舰长(出自Star
Trek,“星际迷航”——译注)喜欢用来使四处掳掠的人工智能生命失效的法门。遗憾的是,同样的准绳也能管用地使您的代码失效。
  大家觉得,可依赖地开发软件、并让大家的支付更易于精晓和掩护的独步途径,是根据大家誉为DRY的规格:系统中的每一项知识都必须持有单一、无歧义、权威的表示。

DRY – Don’t Repeat Yourself
毫不再度你协调

  再一次是代码中最坏的味道,大家可以回顾一下,有些许Bug是因为重新代码漏改引起的,修改重复代码又浪费了略微日子。这么坏的事物一定要恨到骨头里去!书中综合了几种常见的重复类型:
强加的再次(imposed
duplication)
。开发者觉得他们无可接纳——环境犹如须求再一次。强加的再次细分为四类:

  • 信息的多种表示。举个例子,QT的语言源文件是(.ts文件),会由QT工具编译为.qm文件提须求应用程序使用。现在PC千牛把那多少个文本都交给到了SVN,而不是只提交.ts文件然后动态生成.qm文件。因为漏提交.qm文件已经出过两回文案突显相当的Bug。解决这类重复很简短,保险单一数据源,其余的表示方法都由此依据那几个数据源自动生成。办法是有了,但真能保障落成呢?

    Write Code That WritesCode
    编制能编写代码的代码

  • 代码中的文档。DRY法则告诉我们,要把初级的学问放在代码中,它属于那里;把注释保留给其它的高档表达。否则,我们就是在重复知识,而每一回变动都意味既要改变代码,也要改变注释。注释将不可幸免地变得过时,而不得相信的评释比完全没有注释更糟。逻辑清楚的代码自身就是最好的注释,除非是怪诞的生意需要、不得已的暂时解决方案或者是在诸多不便难题前屈服后拔取的特有方案。所以唯有不佳的代码才须求过多诠释。

  • 文档与代码。程序员们寻常都有宝宝写文档的阅历,但反复很难持之以恒,有朝一日代码更新了,因为各个各个的理由,文档没有一并。所以在预备提供文档时请下定狠心与做出承诺:有限支撑要与代码进行同步的换代。
  • 语言问题。似乎C++的.h和.cpp文件,注明与落成就在重新着一样的情节。为了达成模块完成与接口分离的目标,就会油可是生这类重复。没有不难的技术手段防止,好在音讯不雷同编译时期会有荒唐。理想的做法是接口文件能因而完毕公文自动生成。

无意的重新(inadvertent
duplication)
。开发者没有发觉到他们在再一次音讯。
突发性,重复来自设计中的错误。

struct Line{ Point start; Point end; double length;};

  第一即刻上去,那一个类如同是理所当然的。线段分明有起点和终极,并接连有长度(固然长度为零)。但此间有重复。长度是由起源和终端决定的:改变其中一个,长度就会转变。最好是让长度成为总计字段。在之后的支出进程中,你可以因为性能原由此选用违反DRY原则。这日常会生出在你必要缓存数据,以幸免再度昂贵的操作时。其奥妙是使影响局地化。对DRY原则的违背没有暴露给外界:唯有类中的方法需求注意“保持行为突出”。
  把DRY原则确实的消化,在统筹时就会对那类无意的双重敏感,从源头上减小重复暴发的可能。
无耐性的重新(impatient
duplication)
。开发者偷懒,他们再也,因为那样就像更易于。每个门类都有时光压力,你会受到诱惑去拷贝代码来兑现相似的功能,总是没有时间去抽象出组件或者公用函数。如果你以为受到诱惑,想一想古老的格言:“心急吃不了热豆腐”,“磨刀不误砍柴功”。“想一想围绕着Y2K惜败的各个难点。其中不少标题是由开发者的懈怠造成的:他们并未参数化日期字段的尺寸,或是已毕集中的日期服务库。”
开发者之间的重复(interdeveloper
duplication)
。同一团队(或不一样团体)的几人再也了平等的消息。在高层,可以因此清晰的筹划、强有力的技术项目官员(参见288页“重视实效的集体”一节中的内容)、以及在陈设中进行得到了丰富知情的义务划分,对那么些标题加以处理。大家觉得,处理那几个题材的一流艺术是鼓励开发者相互进行主动的沟通。想想散落在外的,数不清的旺旺版本,这未尝不是集体之间的重新呢?组件化的想想格局能化解这一个标题,在促进工作的还要,沉淀一些基础库与组件服务。从前在B2B积累的各个客户端组件,现在不就扶助PC千牛连忙变得健康了吧?

Make It Easy to Reuse
让复用变得简单

  你所要做的是营造一种环境,在里头要找到并复用已部分东西,比自己编辑更便于。假如不简单,大家就不会去复用。而只要不举行复用,你们就会有再一次知识的高危机。

关于ReactJS .NET

时刻耦合

  时间是软件架构的一个寻常被忽视的地方,吸引大家的日子只是进度表上的光阴。作为软件本身的一种设计元素,时间有七个地点对大家很紧要:并发和次序。大家在编程时,常常并不曾把那四个方面放在心上。当芸芸众生最初坐下来起始筹划架构、或是编写程序时,事情屡屡是线性的,这是绝一大半人的沉思方式——总是先做那么些,然后再做更加。但那样考虑会带来时间耦合:在时刻上的耦合,方法A必须总在方法B以前调用,“嘀”必须在“嗒”此前暴发。
  程序在时序性上的依赖是客观存在的,我们需要做的是
  1. 尽量减弱不需求的时序看重以增强并发能力;
  2.
确保真的须求的时序珍惜不存在被毁坏的或是。人们常见会透过文档表达时序的着重性,似乎MSDN中会写明使用COM以前务必调用CoInitialize()一样。但实际上支出中时序上依赖日常会成为潜规则,只有当初开发的人自己清楚,对前边维护的人来讲那就会是定时炸弹。对不得已的时序敬服自然要写入文档或者标明注释。

它是专对.NET平台开发者设计,让大家不但可以在前者去Render出页面,也得以在Server端去Render页面。开发ReactJS能够用一般JS
库,也可以通过类似XML的JSX编写方式去付出。官方网站 http://reactjs.net/
,已经得以匡助ASP.NET 5!

正交性

  正交性”是从几何学中借来的术语。若是两条直线相交成直角,它们就是正交的。在测算技巧中,该术语用于表示某种不相依赖性或是解耦性。即使七个或越多东西中的一个暴发变化,不会潜移默化其余东西,这几个事物就是正交的。

Eliminate Effects BetweenUnrelated Things
免去无关事物之间的影响

  假设你编写正交的系统,你获取八个举足轻重利益:进步生产率与下滑危害。贯彻正交性原则得以有助于组件化与复用;可以使得减弱错误代码影响的限制;更利于单元测试。你也足以对品种社团的正交性进行衡量:只要看一看,在谈论每个所需变更时要求涉及多少人。人数越来越多,团队的正交性就越差。明显,正交的团体功效也更高(固然如此,我们也鼓励子团队不断地互动沟通)。
  正交性与DRY原则紧密相关。运用DRY原则,你是在谋求使系统中的重复降至最小;运用正交性原则,你可下落系统的各组件间的相互看重。那样说可能有些愚钝,但万一您紧密结合DRY原则、运用正交性原则,你将会发现你付出的连串会变得愈加灵活、更易于明白、并且更便于调试、测试和掩护。
  这本书花了很大的篇幅叙述DRY原则和正交性(也就是解耦),也提供了广大有履行意义的艺术。回看一下设计格局,很多情势也多亏为了化解那多个难点。那多少个规格大家一定都如数家珍,那里引用序言书评中的一句话:“能不可能让科学的尺度指引科学的一言一动本身,其实就是分别是还是不是是高手的一个明显标志”。知道很不难,尝试在一般开支中去实践从而真正内化,最后落得运用熟练。
  我们认为违反这两个原则的设计和实现就是“破窗户“。在保障自己不发出的同时,也要留心现有代码,发现标题抛出来,大家齐声谈谈哪些优化几时优化(优化有危机,重构需谨慎)。最终如故消灭,要么确保一定被记录在案(把破窗口先用木板暂时封起来)。千万不要看到不佳的代码皱皱眉、抱怨两句就停止了,把它内置TODO
List里面!

大家参照入门教程(http://reactjs.cn/react/docs/getting-started.html),首先我们创建一个空的ASP.NET
MVC 4项目,可以由此Nuget去安装ReactJS.NET组件:

重构

  随着程序的演化,我们有必不可少重新考虑初叶的核定,比量齐观写一些代码。这一进程非凡自然。代码需求衍生和变化;它不是静态的东西。
  无论代码具有上面的怎么特征,你都应当考虑重构代码:重复;非正交的宏图;过时的学识(最特异的就是必要已经下线、方案已经改成,但过时代码却还残留甚至运转);性能难点。
  人们无独有偶用肿瘤来比喻重构的须求性,在切切实实的时日压力面前,须求做出科学的挑选。追踪需求重构的事物。若是您无法即时重构某样东西,就必定要把它列入安排。确保受到震慑的代码使用者知道该代码陈设要重构,以及那可能会怎么样影响他们。

Refactor Early, Refactor Often
早重构,常重构

书中付出了几点重构实践上的指点:

  1. 不用试图在重构的同时扩大效果。
  2. 在初始重构前,确保您所有理想的测试。
  3. 运用短小,冥思苦索的步调。把全体重构工作认真的诠释为单独、轻量的多少个步骤,每个步骤完萨格勒布得以拓展测试,这将推进连忙定位难题。

    #### 无处不在的自动化

      让电脑去做重新、庸常的政工——它会做得比我们更好。大家有更关键、更不方便的作业要做。

    Don’t Use Manual Procedures
    并非选拔手工流程

  自动化为大家带来八个醒目标好处:防止重复劳动进步效用;保持可依赖的一致性与可重复性,排除人干活操作可能发生的荒唐。可以自动化的序列包蕴但不压制:项目编译,回归测试,构建与发布,通过单一数据源生成多少的其他代表。
  “鞋匠的男女没鞋穿”。我们是程序员,是不是在的平凡工作中平常制作自动化工具?至少领悟一门高级脚本语言用于火速支付自制工具。

哲学 3

可撤消性

  大家让本书的无数话题相互协作,以创设灵活、有适应能力的软件。通过服从它们的提出——更加是DRY原则(26页)、解耦(138页)以及元数据的使用(144页)——大家不必做出过多根本的、不可逆袭的决定。那是一件好工作,因为大家不要总能在一开头就做出最好的裁定。大家运用了某种技术,却发现大家雇不到丰盛的富有要求技能的人。大家恰好选定某个第三方供应商,他们就被竞争者收购了。与大家开发软件的进度相比较,必要、用户以及硬件变得更快。

There Are No FinalDecisions
不存在最后裁决

  没有人了然以后会悄如何,更加是大家!所以要让您的代码学会“摇滚”:可以“摇”就“摇”,必须“滚”就“滚”。
  需求变更,是永恒的话题。变更往往又总是不可幸免、总是急不可待。在筹划与编码时尽可能的小心并应用以上多少个尺码,会让我们面对变化临危不俱,甚至足以直达“中流换马(change
horses in midstream)”的一箭穿心。

成立首个零部件 CommentBox:

元程序设计

  细节会弄乱我们整洁的代码——特别是如果它们经常变化。每当大家不可能不去改变代码,以适应商业逻辑、法律或管理人员个人一时的意气的某种变化时,大家都有破坏系统或引入新bug的惊险。所以咱们说“把细节赶出去!”把它们赶出代码。当大家在与它作斗争时,大家得以让大家的代码变得惊人可配备和“软绵绵”——就就是,不难适应变化。
  要用元数据(metadata)描述应用的配备选项:调谐参数、用户偏好、安装目录等等。元数据是数码的多少,最为广泛的事例可能是数据库schema或数额词典。

Configure,Don’t Integrate
要安排,不要集成

  但大家不仅是想把元数据用于简单的偏好。咱们想要尽可能多地通过元数据配置和驱动应用:为一般景况编写程序,把具体意况放在别处——在编译的代码库之外。

Put Abstractions in Code,Details in Metadata
将抽象放进代码,细节放进元数据

@{

曳(yè)光弹

  译著中对曳光弹的叙说有点难懂,百科中的解释:曳光弹是一种具有能发光的化学药剂的炮弹或枪弹,用于提醒弹道和对象。曳光弹在光源不足或黑暗中可兆示出弹道,支持射手举办弹道考订,甚至作为辅导以及关系友军攻击矛头与岗位的方式与工具。
  那一个类比或许有点暴力,但它适用于新的门类,尤其是当您构建从未构建过的事物时。与枪手一样,你也设法在昏天黑地中击中目标。因为您的用户从未见过这样的系统,他们的须要可能会含糊不清。因为您在行使不熟知的算法、技术、语言或库,你面对着大批量未知的东西。同时,因为成功项目必要时间,在很大程度上您可见确知,你的行事环境将在你成功从前发生变化。
  经典的做法是把系统定死。制作多量文档,逐一列出每项必要、确定所有未知因素、并限量条件。依据死的盘算射击。预先进行两次大批量总计,然后射击并期望击中目标。
  然则,重视实效的程序员往往更爱好使用曳光弹。

Use Tracer Bullets toFind the Target
用曳光弹找到对象

  曳光代码并非用过就扔的代码:你编写它,是为着保存它。它涵盖其余一段产品代码都拥有的全部的荒唐检查、结构、文档、以及自查。它只可是功效不全而已。不过,一旦您在系统的各组件间完毕了端到端(end-to-end)的接连,你就足以检查你离目的还有多少路程,并在必要的动静下开展调整。一旦您一点一滴瞄准,扩展效益将是一件简单的事体。
  曳光开发与品种决不会终止的视角是同等的:总有改变需求形成,总有功用须要充实。那是一个渐进的经过。
  曳光开发其实大家或多或少都在参预。新品类创设时搭建框架代码,逐步为框架添加效果正是那样一个经过。大家会在框架中让机要流程可见运转,以检察新技巧在实际环境中的表现与预研的结果是不是一律;检验全体统筹是还是不是有全球瞩目的特性难题;让用户尽快看到可工作的产品以提供报告;为总体公司提供可以干活的布局与集成平台,大家只必要关注扩充效果代码让框架更丰满。
  曳光开发和原型形式有拨云见日有别。原型中的代码是用过就扔的,寻求以最快的快慢体现产品,甚至会利用更尖端的语言。曳光代码纵然简单,但却是已毕的,它有着完整的谬误检查与那一个处理,只但是是成效不全而已。

Layout = null;

Bug与Debug

  自从14世纪以来,bug一词就一贯被用于描述“恐怖的东西”。COBOL的发明者,海军少校格雷斯Hopper大学生据信观察到了第一只计算机bug——真的是一只昆虫,一只在早期总结机连串的继电器里抓到的蛾子。在被须求表明机器为啥未按期望运转时,有一位技术人士报告说,“有一只昆虫在系统里”,并且负责地把它——翅膀及此外兼具片段——粘在了日志簿里。
调节的心情学
  发现了客人的bug之后,你可以费用时间和生命力去斥责令人恨之入骨的肇事者。但bug是您的偏向依然外人的不是,并不是真的很有涉及。它如故是您的难题。

Fix the Problem, Not theBlame
要修正难点,而不是发生指责

  人很简单手忙脚乱,尤其是如若你正面临最终时限的来临、或是正在设法找出bug的原故,有一个神经质的小业主或客户在您的颈部后边气短。但要命关键的事体是,要后退一步,实际考虑如何或者引致你以为表征了bug的那个症状。

Don’t Panic
无须慌乱

  bug有可能存在于OS、编译器、或是第三方产品中——但那不应当是你的第一想方设法。有大得多的可能的是,bug存在于正在开发的施用代码中。记住,假使您看到马蹄印,要想到马,而不是斑马(那一个比喻太棒了!)。OS很可能小意思。数据库也很可能情状杰出。
  我们参与过一个品类的付出,有位高级工程师确信select系统调用在Solaris上有难点。再多的告诫或逻辑也不知所可改变他的想法(那台机械上的具备其余网络使用都干活卓越这一真相也一样不著见效)。他花了数周时间编写绕开这一题材的代码,因为某种奇怪的原由,却好像并不曾解决难题。当最终被迫坐下来、阅读有关select的文档时,他在几分钟以内就发现并改进了难点。现在每当有人开头因为很可能是大家友好的故障而叫苦不迭系统时,我们就会采取“select小意思”作为温和的擢升。

Select” Isn’t Broken
“Select”小难题

  基于越是新添加的代码越可能滋生难点的可疑,书中引进了二分查找的方法不断压缩范围,最后定位难题。那措施看起来很老土,但推行中多次很得力,在毫无头绪时不妨试一试。
  在发现某个bug让您吃惊时(也许你在用大家听不到的声音咕哝说:“那不能。”),你必须再度评估你确信不疑的“事实”。某样东西出错时,你感觉吃惊的水准与你对正值运行的代码的信赖及信念成正比。那就是为什么,在直面“令人大吃一惊”的故障时,你必须意识到你的一个或越来越多的借使是错的。不要因为你“知道”它能办事而随意放过与bug有牵连的例程或代码。表明它。用那些多少、这个边界条件、在这一个语境中证实它。
  说到令人奇怪的bug,近年来恰巧经历了三次。关于PC千牛插件最大化行为的bug,我和杯酒电话中怎样啄磨都不可能了解对方,最后到实地看了才精晓。这些题材只会发作在低分辨率的微处理器上,他是便携台式机分辨率低,而自我是高分屏的开发机。即使你目睹bug或见到bug报告时的首先影响是“那不可以”,你就完全错了。一个脑细胞都不用浪费在以“但那无法爆发”开端的笔触上,因为很备受关注,那不仅可能,而且早已暴发了

Don’t Assume it– Prove It
毫不假定,要验证

}

断言式编程

在自责中有一种满足感。当我们责备自己时,会认为再没人有权责备我们。
  ——奥斯卡·魏尔德e:《多里安·格雷的画像》

  每一个程序员如同都不可以不在其职业生涯的最初记住一段曼特罗(mantra)。它是总结技巧的主导规则,是我们学着应用于要求、设计、代码、注释——也就是我们所做的每一件事情——的中坚信仰。那就是:这决不会发生……
  “这几个代码不会被用上30年,所以用两位数字代表日期没难点。”“那些应用决不会在国外使用,那么为何要使其国际化?”“count不容许为负。”“那个printf不能够破产。”大家不要那样自己欺骗,尤其是在编码时。

If It Can’t Happen, Use Assertions to Ensure That It Won’t
若是它不可以发生,用断言确保它不会爆发

  断言或者会滋生副功能,因为预知或者会在编译时被关闭——决不要把必须履行的代码放在assert中。那个题材就是一种“海森堡虫子”(Heisenbug)——调试改变了被调剂系统的作为。
  断言的补益不问可知,可以增加调试的频率,可以尽早的发现难点。调试的时候应该有限支撑对断言敏感,假如自己并猪时间去查证断言爆发的缘由,也应有把标题抛出来及时缓解。如果对断言屡见不鲜,也就错过了断言的意义。可以设想在输出错误日志的艺术中一贯插手断言,往往要求记录错误的难题也是大家认为不应当暴发或者要求引起关心的标题。到近来我还清清楚楚的回想之前的一个Bug就是因为断言副功效引起的,因为自身写了那般的代码:ASSERT(SUCCEEDED(Initialize()));,调试时一切正常,当以release编译公布测试包时就应运而生了难题。

<html>

靠巧合编程

  你有没有看过老式的是非战争片?一个疲劳的战士警觉地从灌木丛里钻出来,后面有一片空旷地:这里有地雷吗?还可以高枕无忧通过?没有任何迹象注解那是雷区——没有标记、没有带刺的铁丝网、也不曾弹坑。士兵用他的刺刀戳了戳前方的本地,又急匆匆缩回来,以为会发生爆炸。没有,于是她紧张地前进走了少时,刺刺那里,戳戳那里。最终,他确信那个地点是平安的,于是直起身来,骄傲地正步向前走去,结果却被炸成了零星。士兵开头的探测没有察觉地雷,但那不过是万幸。他经过得出了错误的下结论——结果是不幸的。
  作为开发者,大家也工作在雷区里,每日都有成百的陷阱在等着抓住我们。记住士兵的故事,大家相应警惕,不要得出错误的定论。我们应该避免靠巧合编程——依靠运气和偶发性的中标——而要深思熟虑地编程。

Don’t Program by Coincidence
毫不靠巧合编程

  书中提到三种依靠巧合编程的超人:完结的偶然与分包的如果。已毕的偶尔就是在应用新技巧、三方库或者其余人写的模块时,拼凑的代码碰巧工作了,那么咱们就公布胜利甘休编码。当那些代码出难点时,经常会一头雾水,因为当时历来不精通它为啥会工作。隐含的只若是开发者使用自以为的前提,而其实没有此外文档或者具体数据足以依赖。我一度碰着过这么令人难堪的阅历:代码珍爱了某个存在已久的bug的荒唐表现,当以此bug最后被修复时,原本运行杰出的代码反而出现了难题。大家常说“踩坑”,那几个坑可能是先行者用巧合编程留下的,也恐怕是因为大家赖以了戏剧性编程而引起的。
  避免完成的偶然,必要我们谨慎对待不熟识的器重,仔细翻阅文档,代码纵然可以干活,但并不一定正确。避免隐含的若是,必要大家只依靠可看重的东西,针对暂时不可以获知的恐怕,代码要以最坏的只要来对待,无法给自己盲目标乐观的条件。下次有何东西看起来能做事,而你却不明了为什么,要规定它不是巧合。
  书中另一个大旨“邪恶的率领”,适合在这边提一下。向导发生的代码往往和大家编辑的代码交织在一起,这要求我们去领会它,否则大家怎么敢去依靠它来让代码工作呢?

Don’t Use Wizard Code You Don’t Understand
永不选拔你不知底的指点代码

<head>

必要之坑

Don't Gather Requirements- Dig for Them
并非搜集必要——挖掘它们

  用户的须求描述可能是:只有员工的下面和人事部门才方可查看员工的档案。经过挖掘的要求:唯有指定的人手才能查看员工档案。前者把规则硬性的写入了急需,但规则日常会转移。后者的亮点是必要描述为一般陈述,规则独立描述,那样规则可以改为应用中的元数据。在促成时可以把需求领悟为:唯有得到授权的用户可以访问员工档案,开发者就可能会落到实处某种访问控制系统。规则变更时,唯有系统的元数据须求更新,以如此的角度去完毕必要,得到的当然就是支撑元数据、得到了得天独厚分解的种类。但也要专注避免过度设计,必要可能就是那么不难。

Abstractions Live Longerthan Details
空泛比细节活得更深远

  “投资”于肤浅,而不是兑现。抽象能在来源不一样的落实和新技巧的成形的“攻击”之下存活下来。书中一再举了Y2K难点的事例,认为其发生有三个至关紧要原因:没有超过当时的商业实践往前看,以及对DRY原则的背离。即使须求需求把多个数字的年份用于数据输入、报表、以及存储,本来也应该设计一种DATE抽象,“知道”多个数据的年份只是真实日期的一种缩略方式。

<title>Hello React</title>

巨大的希望

  假如您和用户紧密合作,分享他们的愿意,工同他们调换你正在做的作业,那么当项目交付时,就不会爆发多少让人吃惊的事务了。那是一件糟糕的事情。要想尽让您的用户惊叹。请留意,不是勒迫他们,而是要让她们产快意。给她们的事物要比他们期望的多或多或少。

Gently Exceed Your Users’ Expectations
温柔地当先用户的冀望

  做到那一点的前提是要精通用户的期望。可以凭借“曳光弹”和“原型”与用户调换。永远不要把大家以为好的事物当成是用户想要的。

</head>

足足好的软件

欲求更好,常把好事变糟。
  ——李尔王 1.4

  有一个老的笑话,说一家美利哥公司向一家扶桑创制商订购100
000片集成电路。规格表明中有次品率:10
000片中只可以有1片。几周随后订货到了:一个大盒子,里面有着数千片IC,还有一个小盒子,里面只享有10片IC。在小盒子上有一个标签,上边写着:“那一个是次品”。如果大家实在能如此控制质地就好了。但实际世界不会让我们制作出卓殊到家的成品,更加是不会有无错的软件。时间、技术和急性都在合谋反对大家。
  软件哪天“丰盛好”?客户会比开发人士更有发言权。他们或者尽快要求一个仍可以的本子,但不想为了一个圆满的版本再等上一年。即便那里倡导大家绝不追求极致的宏观,但也不代表大家得以交到充满瑕疵的毛坯。引用耗子兄在《Rework》摘录及感想中的一段话:平衡Done和Perfect的主意正好就是那句话——“与其做个半成品,不好做好半个产品”,因为,一个半成品会让人绝望,而半个好产品会让人有所期望,这就是其中的不同

<body>

<div id="content"></div>

<script src="@Url.Content("~/Scripts/react.js")"></script>

<script src="@Url.Content("~/Scripts/Tutorial.jsx")"></script>

</body>

</html>

添加以下代码到Tutorial.jsx:

var
CommentBox = React.createClass({

render: function() {

return (

<div className="commentBox">

Hello, world! I am a CommentBox.

</div>

);

}

});

React.render(

<CommentBox />,

document.getElementById('content')

);

把每个想要Render出来的界面当作组件来操作,上边就是一个零部件的变化语法,其中组件就是commentBox。被Render在Content之后,而指出作法是要将转移的靶子的JSX文件,放在要呈现的Tag前边。

 

设若要绑定数据也可以那样写:

var
CommentBox = React.createClass({

render: function() {

return (

<div className="commentBox">

<h1>Comments</h1>

<CommentList data={this.props.data} />

<br />

 

</div>

);

}

});

var
data = [

{
Author: "Daniel Lo AAA", Text: "Hello ReactJS.NET World!" },

{
Author: "Pete Hunt BBB", Text: "This is one comment" },

{
Author: "Jordan Walke CCC", Text: "This is *another* comment" }

];

var
CommentList = React.createClass({

render: function() {

var
commentNodes = this.props.data.map(function (fff) {

return (

<Comment author={fff.Author}>

{fff.Text}

</Comment>

);

});

return (

<div className="commentList">

{commentNodes}

</div>

);

}

});

 

var
Comment = React.createClass({

render: function() {

 

return (

<div className="comment">

<h2 className="commentAuthor">

{this.props.author}

</h2>

{this.props.children}

</div>

);

}

});

 

React.render(

<CommentBox data={data}/>,

document.getElementById('content')

);

运作效果如下:

哲学 4

这一段重即使将data那一个数额集放入Commentbox那一个目标中,在Ccommentbox对象中又富含了Commentlist那么些目的,所以,必须爆发Commenlist这些目的,并在那对象里面处理数据,而在Commentlist中,每条数据的表现定义,定义为:

var commentNodes = this.props.data.map(function (fff) {

return (

<Comment author={fff.Author}>

{fff.Text}

</Comment>

);

末尾,在由Comment爆发对象,并在目的内定义每一条数据的样式。就可以把每笔数据用List格局呈现出来了。而在运用JSX最重点一点,千万要记得在文书最开始要进入

/** @jsx React.DOM */

就算,它是运用JSX方式编写,不过最后依旧会编译成JS文件,若是没有参与这一行,就不会有动作了,且务必在MVC的View中的<head>之后进入下边这一行

<script src="@Url.Content("~/Scripts/react.js")"></script>

借使要改用服务端拉取数据,就非得考虑到React
State,网页起头化时候并从未数据,然而会先把网页Render出来这时候再调用MVC的Controller取出多少,此时多少就会有着改观,进而去创新数据。

public ActionResult Reactjs()

{

IList<CommentModel>
_comments = new
List<CommentModel>

{

new CommentModel

{

Author = "Daniel Lo Nigro",

Text = "Hello ReactJS.NET
World!"

},

new CommentModel

{

Author = "Pete Hunt",

Text = "This is one comment"

},

new CommentModel

{

Author = "Jordan Walke",

Text = "This is *another*
comment"

},

};

 

return
Json(_comments, JsonRequestBehavior.AllowGet);

 

}

 

JSX可以套用上边的Script去做一些修改,获取数据地点改成GET
Data,完整的代码如下:

/**
@jsx React.DOM */

 

var
CommentBox = React.createClass({

    getInitialState:
function() {

return {data: []};

},

componentWillMount: function() {

var xhr = new XMLHttpRequest();

xhr.open('get', this.props.url, true);

xhr.onload = function() {

var data = JSON.parse(xhr.responseText);

this.setState({ data: data });

}.bind(this);

xhr.send();

},

 

render: function() {

return (

<div className="commentBox">

<h1>Comments</h1>

<CommentList data={this.state.data} />

<br />

 

</div>

);

}

});

 

 

 

 

var
CommentList = React.createClass({

render: function() {

var commentNodes = this.props.data.map(function (fff) {

return (

<Comment author={fff.Author}>

{fff.Text}

</Comment>

);

});

哲学,return (

<div className="commentList">

{commentNodes}

</div>

);

}

});

 

var
Comment = React.createClass({

render: function() {

 

return (

<div className="comment">

<h2 className="commentAuthor">

{this.props.author}

</h2>

{this.props.children}

</div>

);

}

});

 

React.render(

<CommentBox url="/Home/Reactjs" />,

document.getElementById('content')

);

 

地点是概括演示了选择ReactJS.NET, 进一步的请参见官方网站
http://reactjs.net/ 的文档,后续继续学习ReactJS。

演示代码下载: http://files.cnblogs.com/files/shanyou/ReactDemo.zip

React 中文网

React
入门教程

颠覆式前端UI开发框架:React

深远浅出React(一):React的陈设经济学 -
简单之美

React
Native探索(一):背景、规划和风险

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。