大话代码架构(项目实战版).html.pdf
《大话代码架构(项目实战版).html.pdf》由会员分享,可在线阅读,更多相关《大话代码架构(项目实战版).html.pdf(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、序言 2017年是不平凡的一年。 时隔4年,Nokia终于带着情怀回归了。 苹果也迎来了10周年纪念。 微信小程序对个人用户开放了。 2017年是一个非常强调“工匠精神”的一年,但是MOL(即笔者本人)在本书中强调的是“懒人精神”。不管你承认与否,所有的人都希望自己能不劳而获。当然,这只是一个美好的愿望。MOL只 能教大家做最少的事情来赚取更多的休息时间及陪伴家人的时间,这就是我所谓的“懒人精神”。 有些读者可能好奇为何笔者给自己起了MOL这个奇怪的笔名。关于这个问题,笔者在2014年出版的ASP.NET入门很简单一书中有过交代,有兴趣的读者可以去看看那本书。 凡属过往,皆为序章。 写ASP.
2、NET入门很简单的时候,MOL刚刚结婚。在写本书的时候,MOL已经有了幸福的三口之家,宝宝已经可以通过一些简单的词汇来表达自己的情绪和意愿,并且还会跟MOL抢键盘。我的妻 也在为这个幸福之家努力奋斗。想想自己真是幸运。虽然本书写得艰苦,家庭工作琐事也繁多,但是为了自己的这份幸运和广大期待本书已久的“摩丝”(MOL的粉丝),即使再艰苦,MOL都没有放弃。 所谓更牛,只是换个“罪”受。 作为一个技术宅男,MOL更愿意每天只对着计算机写写代码就可以完成自己养家糊口的任务。理想总是那么丰满,而现实又是如此骨感。对于一个职业程序员来说,MOL的经历还算比较丰富。记得图 书市场上出版过一本不想当厨子的裁缝
3、不是好司机,后来这个有点无厘头的书名成了一句经常被人引用的调侃语。在此MOL也想把这句话改改,和朋友们说“不想当程序员的艺术家不是好魔术师”。 非常幸运,这几种职业MOL都做过,也希望读者朋友们的职业经历丰富一些。 在我带领自己的技术团队做项目的时候,经历过痛苦,也经历过欢笑。我一直都觉得自己非常幸运,因为在本书中出现的刘朋、岳鹏辉、李冲冲他们3个人,悟性非常高,而且颇有自己的见解。在征得 他们的同意后,他们将以真实名字在本书中出现。 MOL不是大牛,只是愿意把自己的经历与更多的人分享。所以,本书中并没有讲解非常高、精、尖的技术,而是带领大家走进了“懒人”的世界。每个程序员都会进入迷茫期,不知
4、道自己要干什么。 所以希望本书能从另一个也许大家从未思考过的角度给大家一些启发。 从你翻开本书的第一页开始,MOL相信你已经准备好换一种“受罪”的方式了,那你离“更牛”也就不远了! 最后,MOL要响应习主席的号召,撸起袖子,加油干!对于MOL和大多数的“摩丝”来说,恐怕我们要脱掉秋裤,加油跑了! 先给自己定一个小目标,今年,2017年,我要成为一个“懒人”! 田伟 前言 架构(Architecture)是什么?可能每个人给出的答案都不同。业界流行一句笑话: Architecture is like teenage sex,everybody talks about it,nobody real
5、ly knows what it is. 当然,MOL也不可能给出一个关于架构的准确定义。MOL更愿意把架构归为哲学的范畴。架构本身其实和软件开发并无太大关系。一个国家有自己的管理体系;一个公司有自己的组织架构;一个家庭 也有独特的男权或女权的特色,小到一个人;也是可以分为自我、本我和超我的。每个事物都是由一个个更小的事物组合而成的,而这些其实都与架构相关。 在宏观世界里,所有的国家公民构成了一个国家主体,国家主体对每个公民进行管理和约束,这是架构。 在微观世界里,电子绕着原子核高速转动,始终不会脱离原子核的管辖范围。而原子核和电子又组成一个原子。原子对电子、质子、中子的管理就是架构。 本书的
6、读者一定是软件行业的高手或菜鸟,那我们就回到软件编程的世界里。 每个软件项目都是由代码和服务器构成的,如何统筹安排代码和服务器,就是架构的范畴了。 一个项目可能要使用多台服务器,如Web服务器、数据库服务器、文件服务器、CDN如何针对不同的要求对服务器进行选型,这是架构;如何统一管理这些服务器,这是架构;如何让这些服务器 平稳运行,这也是架构。 开发项目使用什么语言,是Java还是Node.js?选用什么数据库,是Oracle还是MongoDB?这是架构。 具体到开发过程中,某个模块应该如何安排,是交给DBA(数据库管理员)用存储过程来实现,还是让C#程序员访问数据库实现?这是架构。 在写C#
7、代码的时候,采用三层架构,还是MVC?这是架构。 如何写日志,是使用I/O读写文件?还是采用log4net?或者是AOP切片写日志?这是架构。 甚至具体到某种技术的时候,也有架构。比如MOL规定项目要使用MVC架构,那么使用微软的MVC,还是Spring的MVC?这都是架构。 可见,架构涉及的范围非常之广。弱水三千,MOL只给一瓢。本书将从代码架构的角度来让大家一窥架构的真面目。 C#是一门非常优雅的编程语言(当然MOL并无编程语言的偏见),所以本书中所有的代码都以C#语言来描述。 本书特色 1.风趣幽默 MOL一直比较反对平铺直叙的讲解方式,所以本书的语言风格是比较幽默的。在本书的内容中将出
8、现3个与MOL并肩作战的兄弟(公司老大邓总不在此列),以对话形式抛出问题并解决问题。 2.案例分析 本书中只有一个项目“晋商卡”,但MOL会带着大家见证“晋商卡”从无到有的过程,大家可以在这个过程中获得很多意想不到的收获。 3.向循规蹈矩说NO 正如MOL在结语中所说,2017年是一个强调“工匠精神”的一年。几乎所有的人都在精益求精地做自己的事情。但MOL要分享给大家的是一种懒人精神,我们不愿意日复一日地重复昨天的自己,我 们要站在更高的层面,做更少的事情,却有更多的收获。 本书内容及体系结构 第1篇 需求与三层架构(第13章) 本篇详细介绍了项目开发的前置节点需求,并对常见的三层架构给出了分
9、析。在第1篇中提出了面向对象的重点概念,并让大家初步认识抽象的过程。 相信很多人一定被书中大段的SQL代码搞得云里雾里,不用担心,在第3章中MOL将带领大家完成懒人的第一步如何不写SQL代码。 第2篇 NoSQL和测试(第4、5章) NoSQL是现在比较流行的一个话题和技术。在第4章中将通过讲解MongoDB来介绍NoSQL如何使用,并且纠正大家的一个错误观念:NoSQL和ORM不能搭配使用。 第5章分享了测试的工作,并讲解了单元测试、黑盒测试、白盒测试让大家在收获的同时,也能理解测试工程师在工作中所要面临的一些痛苦。 第3篇 高精尖技术(第69章) 任何一个网站项目,似乎都绕不开“缓存”这个
10、神奇的空间。缓存用得好,可以加快系统的反应速度。如果缓存用得不好,不仅用户体验差,还可能造成服务器宕机。第6章就分享了如何使用缓存。 每个程序员都有一个全栈的梦想,而前端又是全栈中必不可少的一部分,第7章讲解了如何使用EasyUI来搭建前端。 现在越来越多的电商网站都会做一些抢购或促销活动,当然这就使得网站不可避免地面临高并发。如何处理高并发呢?第8章将通过讲解消息队列,来说明如何应对高并发。 微信已经成了人们生活中必不可少的一部分。在2017年3月27日这一天,微信小程序也对个人用户开放了。我们如何把“晋商卡”挂到微信公众平台上,又如何开发微信小程序呢?这些问题都将在第9 章中解决。 本书读
11、者对象 对代码架构感兴趣的初学者; 对代码架构感兴趣的爱好者; 高校学生和相关培训学校的学员; 初入职场需要提高开发水平的开发人员。 因为书中所有的代码都以C#语言来描述,所以本书读者如果有一定的C#语言基础更佳。 本书配套资源及获取方式 为了方便读者高效地学习,本书特意提供了以下配套资源: 本书源代码文件; 本书涉及的一些开发工具的安装包。 这些配套资源需要读者自行下载。请读者登录机械工业出版社华章公司的网站,然后搜索到本书页面,按照页面上的说明进行下载。 本书作者 本书主要由田伟(就是笔者MOL)和郎小娇主笔编写。其他参与编写的人员还有李小妹、周晨、桂凤林等。 读者阅读本书时若有疑问,可以
12、发邮件到hzbook2017以获得帮助。 引言 我叫MOL,如果你是MOL的读者,那么一定知道“摩丝”了。MOL者,“摩尔”也。摩丝者,MOL的粉丝也。MOL在本书里将带领大家一起做一个属于自己的代码架构。 代码架构和架构是一样的吗?且看MOL如何分解。 一谈到架构(Architecture),大家一定会觉得它是一个非常“高大上”的东西,当然,大部分人都是这样宣传的。为了让大家有一个更好的感性认识(因为本书并不是讲架构的,所以只要有感性认 识就可以了),MOL决定用一个简单的例子来告诉大家什么是架构。 一个架构师的例子 在2015年的时候,MOL主导了一个B2C(Business-To-Cus
13、tomer,商家对客户)网站,MOL在这个项目里面充当了非常多的角色,如产品经理、项目经理、架构师、DBA(数据库管理员)、程序 员、QA(质量管理员)、Tester(测试员)现在来看一下MOL作为架构师时所做的事情。 MOL作为架构师,是以大体需求为前提的,也就是说,我们在这里不去讲如何获取需求,因为这不是架构师份内的事。当MOL拿到需求以后,就可以进行架构了。架构大体上分为两部分:硬架构和软 架构(这并不是标准的叫法,只是想让大家更好地理解架构)。 1.硬架构 顾名思义,硬架构就是关于硬件的架构。MOL根据目标用户量和业务要求,采购了3台服务器,分别作为文件服务器、数据库服务器和Web服务
14、器(同时兼任缓存服务器),同时,建议用户在客户量 增加到一定数量级以后,增加CDN(Content Delivery Network,内容分发网络)服务器,以加快访问速度。 OK,架构师的输出已经完成了。但大家以为架构师就买几台服务器就完事儿了吗?那就大错特错了。在买服务器的背后,MOL对需求进行了研究,分析了网站需要承担的平均访问量和网站的业务内 容。这个网站的访问量并没有大到令人发指的地步,所以我们暂时不用考虑硬件负载均衡的问题,只需要提供一台Web服务器就可以了。这台Web服务器需要处理用户发来的请求并做出响应给用户。为了 提高Web服务器的性能,我们将会在这台Web服务器上安装虚拟机,
15、并用Nginx(一个HTTP服务器,类似于IIS)做软负载均衡。 由于本系统中需要保存大量的用户文件,如果把这些文件都放在Web服务器上,那会给软件负载均衡产生额外的负担,并且大量的文件很容易把一台服务器“撑爆”。所以,我们用一台服务器专门来 保存文件信息,这台服务器就叫文件服务器。 数据库是一个项目中必不可少的一部分,数据库的本质其实就是文件和内容的组合,所以数据库的空间增长也是不可小觑的。而且数据库的操作,将会耗费大量宝贵的CPU和内存资源。所以我们将数 据库专门放在一台服务器上,这台服务器就叫数据库服务器。 好,硬件资源采购完成了,我们要把它们组合到一起。Web服务器向网络公开,让用户可
16、以访问,而文件服务器和数据库服务器只在局域网中,并不对外公开,这样可以在一定程序上保证安全性,而 且也为客户节省了费用。Web服务器可以访问文件服务器和数据库服务器。 其实硬架构是非常复杂的,但本书不是主要讲硬架构,所以这里讲得非常简单,有兴趣的读者可以自行找“某度”或“某狗”进行搜索。 2.软架构 本系统将采用.NET平台下的C#语言进行开发,采用SQL Server数据库,使用微软的Cache缓存配合Redis来做。前台将以3种终端展示,分别是PC、手机、平板。所以前端将会使用HTML 5来做。 Android手机APP使用Java语言来开发,iOS平台上的APP暂时不做。 同样的,软架构
17、也只是让大家看到了输出,并没有讲为什么这样做,因为这也不是本书的重点。 上面粗略地讲了一下什么是架构。下面来具体看一下代码架构。废话不多说,直接来看图1和图2。 图1 正常的代码架构 图2 不普通、非文艺的代码架构 图1是一个常见的代码架构,而图2可能是新手程序员最喜欢的“代码结构”。代码架构的目的是让不同的代码块去干不同的事,最后再把这些代码块整合在一起,组成一个项目。这是本书要讲的内 容。 可以看到,代码架构和软件架构基本上不属于同一个层次的元素。但不可否认的是,代码架构是一个程序员应该具备的技能,也是通往架构师的必经之路。 PS:各位读者可能对用户和客户这两个概念理解有误,这里统一一下,
18、用户(User)是指使用系统的人,客户(Customer)是指要求我们做这个系统并且支付开发费用的人。 背景及人物介绍 本书中,我们将延续MOL活泼幽默的风格。为了剧情的需要,书中将会出现5位主人公。 MOL:姑且称之为老鸟吧,从事代码工作多年,在公司中主要负责项目管理和代码架构。 邓总:公司老大,身材消瘦如马云,有一双深邃的眼睛。虽然是公司的老大,但在本书中出现的次数并不多。 刘朋:新入职员工,因为名字中的“朋”字“占地”面积很大,所以大家一般都会把“朋”字分开来念,所以他有另一个名字“月月”,性格比较幽默。 岳鹏辉:新入职员工,长得比较帅气(已有女朋友)。 李冲冲:新入职员工,打得一手好乒
19、乓球。 这几位主人公将会在本书中出现,他们可能是说相声的,可能是打酱油的,也可能是回家跪搓衣板的。但是他们更重要的作用是构造一个个生动的故事,在这些故事里面,大家可以看到一个真正的项 目是如何搭建的。 故事来源于生活,却不高于生活,这里的人是真实的,故事是真实的,当然,最重要的是,项目是真实的,知识也是真实的。MOL尽量用最接地气的语言,最平实的故事,来讲述一个个“高大上”的 知识和技术。 我们的目标 我们经常会听到这样的话:“加班不是目的,目的是不加班”。这样的话让人无比窝火,但又无比正确。我们还会听到这样的话:“我这样严厉地要求你,是为了让你成长得更快”。你有理由反驳 吗?其实,换一种方式
20、,我们可以快乐地成长。这也是MOL带团队的宗旨,也是本书的目的。MOL要让你快乐地看完这本书,最后发出的感慨一定是:“代码架构其实挺简单!” 好了,我们要开始了! 第1篇 需求与三层架构 第1章 故事从一个电商网站开始 第2章 为什么是三层 第3章 ORM实体关系映射 第1章 故事从一个电商网站开始 按照惯例,一本书的开始一般会介绍一些基础知识,如Java语法、XML结构等。相信很多读者都立志做一名“高大上”的Coder,但是一看这种开篇讲语法的书就先泄气了。为了不让大家泄气,我们 将使用一个电商网站项目来作为开篇。 说到项目,大家一定会想到某培训机构的机票管理系统、通讯录估计大家都要被这些标
21、题党搞疯了。这些听起来很好听的系统,不一定有什么实用价值。但是我们要介绍的项目,是一个实打实的、 已上线的、微信上可查找的一个项目。如果各位摩丝在任何时候觉得学习有点累了,或者迷茫了,可以上微信搜索“川商卡”,这就是我们要讲的系统。MOL在做这个系统的时候,用到的技术并不多,像 缓存、消息队列等这些技术在项目中没有出现,但在本书中MOL也会讲到。MOL可以很负责任地说,当大家学完这本书后,可以毫不费力地给自己快速搭建一个“高大上”的代码框架。 下面的内容,将是一些非常杂乱的、与代码看似无关的基础知识,请大家耐心看完。 1.1 需求?需求! 相信大家对一些翻译软件的使用已达到炉火纯青的地步了,如
22、果把“需求”这个词输入翻译软件,会出来一大堆对应的英文单词。这里只挑两个容易混淆的单词来说,即Request和Demand。 通常出现需求的地方,一般都会用Demand来描述,但是偶尔也会看到Request。这两个单词都是需求的意思,有啥区别嘞? Demand是必须要完成的,没有商量的余地。比如你的BOSS告诉你:我们的项目要加入某宝支付的功能。这就是Demand。虽然过两天BOSS有可能把这个功能“砍掉”,但是令行禁止,你还是必须 得把某宝支付的功能实现。 Request是锦上添花的功能。比如你的BOSS是一位单身宅男,他问你:在网站某个页面的右下角加入一个美女的图片,可以吗?这就是Requ
23、est,它表示请求。也就是说,你不加这个图片,项目照样 运行。至于这个图片是否要加,那就看你的心情喽。 下面,我们来描述一下本书中的项目需求。 由于本书中的项目采用的是敏捷开发,所以开发过程中的文档特别少(关键文档是不可以省略的)。这里不可能列出所有的需求文档内容,因此将使用Brain Storm(头脑风暴)的方式来描述需求: 这是一个电商网站; 这是一个O2O电商网站; 这个网站有登录注册功能; 这个网站有商品展示功能; 这个网站有订单功能; 这个网站有支付功能; 这个网站有积分功能。 OK,需求就是这么多。估计很多小伙伴都已经开始吐槽了吧:上面的描述也能算需求吗?MOL可以很负责地告诉你,
24、是的,而且这是沟通4个小时后的成果,你相信吗?好了,先不吐槽需求发起人 了。上面的7个功能,就是我们这本书里要实现的需求。好像这也没什么难点啊。但如果你这样想就错了。至于哪里错了,MOL不会做直接回答,在后面的每个章节中,都会对这个问题进行回答,请大家 自行品悟。如果你想要了解详细的需求,那可能要失望了,因为MOL并不打算在这里描述一个完整的需求,而且这并不是实际开发中的情况。在敏捷开发的项目里,一般都是到开发的最后阶段,才能明白 客户想要的是什么东西。 这里引用一幅项目开发领域流传很广的漫画来说明,如图1-1所示。 图1-1 项目开发漫画 1.2 敏捷开发简介 前面提到了敏捷开发,听起来是一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大话 代码 架构 项目 实战 html
限制150内