读书笔记-《解忧杂货铺》

床柜上放着好几本家里带来的小说,总是觉得自己一直对文学作品没什么特别大的兴趣,主要是心静不下来看这些类型的书籍,平常买的技术书籍也是堆积在那里。但是近些日子觉得还是得多看一些书,出于对自己知识面的扩展,做技术日子久了,总感觉自己的知识面太过于狭窄。做技术(敲代码 的),闲暇时间本来就不多,就算有也是把一大半时间花在了技术知识的拓展上。时间总是有的,其实前几个月自己也是荒废了比较多的时间,如果把那些看似闲暇的时间花在读书上其实收益会挺大的。所以近段时间我会劲量多读些书,书籍的范围不限,可以看点小说也可以看一些聊技术的书。
读书笔记写的东西很随意,只是写一些书的主要内容和感想,以便于日后想不起来还可以看一下自己的笔记。

书简介

《解忧杂货铺》还是一本很畅销的书,好像是15年的书,占据各大排行榜最畅销书首位。前段日子,朋友还说这本书很好看 ,我就先开始读了这本。

内容回顾:

一开始讲的就是三个小偷,这三个人分别叫做:翔太,敦也,幸平。他们在某个小区偷了东西,然后落荒而逃,逃到了一家店,也就是我们的书名所说的“解忧杂货铺”,故事就这么开始了。

这家店弥漫着一股奇怪的气息,他们从屋里的听到砰的响声,是屋外的牛奶箱里掉落的一封信。故事就是围绕这个接受信的牛奶箱和另外一个投递信件的窗口展开的。他们收到了一封来自过去的信,写信的人是一个叫做月兔的人,时间点大概在1979年。月兔是一名击剑运动员,他从朋友那里听说,这里有一家可以帮人解除烦恼的店,也就是这家“浪矢杂货铺”,她的烦恼是她有一个卧病在床的男友,他们都是运动员,月兔想放弃奥运会去照看男友,而男友的愿望就是月兔能够进入奥运会,这是即将死去的他唯一的愿望,月兔不知道怎么办,爱和理想产生了冲突。这三个人随即回了信,刚开始他们还不知道月兔的信是来自过去,但一来二去他们就开始明白,原来他们正在和过去的人进行对话,这家杂货铺的信箱连接着过去和未来。
就这样,书分5个章节写了5个故事,第一个讲的理想和爱情产生冲突的奥运选手,第二章讲的是为了音乐奋斗而不知道自己能否坚持下去的克朗,前两章的信都是寄到了未来,这三个人和过去的有烦恼的人提供了建议,第三章写的解忧杂货铺的主人浪失雄治,这里很关键,说的是杂货铺的由来,以及之所以杂货铺连接着过去和未来的原因,是店主雄治在死前的一个心愿就是在自己33年后的忌日能够知道他帮过去解决烦恼的人现在怎么样了(因为他经常做到一个梦),他的建议是不是起到了帮助,在死之前,他把这个心愿托福给了自己的儿子贵之,贵之也按照他的要求去做了,然后在他们最后一次从城里贵之的家回到关闭的杂货铺收到很多来自未来的信,他们竟然成功地连接了未来,雄治做的梦是对的。
最后两章也是讲的类似的故事,就是遇到烦恼了,去到杂货铺解决了,不过所反映的确实他们各自的人生,一个是富有家庭的孩子,父母生意失败了,举家逃难,这个人对人生充满了怀疑,他那时的心境就是觉得父母自私,没有为他考虑,当他像浪矢爷爷求助时,尽管浪矢建议他应该和父母在一起,但他还是在逃亡的过程中离开了他的父母,他一直觉得当初没有听浪矢的话是对的,他与父母断了联系,以一个姓的名字藤川博过着新的生活,知道他从网上知道浪矢杂货铺咨询烦恼窗口在32年后重新启动了,目的是想知道那些过去浪矢爷爷咨询烦恼的人现在怎么样了。这家伙自鸣得意,觉得自己过得很好,想证明自己当初没听浪矢的建议是很对的,就写了封回信准备送过去,直到他在送信的路上才知道了真相,在他和父母分离,他的父母也随即自杀了,原因是父母活下去的唯一希望是他们的儿子。而父母自杀的方式也很诡异,父亲写了一封自杀的信,信上说自杀的是一家三口,逆海身亡。之所以这么做,只有死于海中,尸体很难打捞,找不到很正常,他们知道自己的孩子还活着,不希望死了还影响到自己的孩子,就选择死于海中,希望自己的孩子能够以新的生活开始。(我说的有些蹩脚,但情节还是很感人的)这个故事的剧情大概就是这个样子。
最后一章节,讲的就是过去和未来打通的故事。讲了一个陪酒的女生,在这三个人的帮助下,放弃了配酒的工作,开始听从来自未来的三个人建议(你懂得 建议就是让她搞房地产,股票,以及什么时间点去做哪些事情),在他们的帮助下,在他们的帮助下,这个叫静美的女人从此过上了幸福的生活,最终在时间点上未来和过去产生了联系,静美来到了50多岁,和这个时空的这三个人发生了联系。联系就是开头的这三个小偷落荒而逃的原因,他们偷了一家的东西,这家的主人就是静美,并且绑架了那个想在杂货铺重开的那段时间写感谢信给浪矢的静美(静美不知道提供给他建议的是这个三个人)。

感想

内容写的有点多,小说的故事线还是很丰富的。这么点文字只能写出个大概。小说里的每个故事很形象的展示出了那些遇到困难人的心境。每个小故事都能透露着普通人的人性。他们的有一些想法我也有过。整体上这本书还是可以的,故事串联的很好,每个故事都存在这关联,连接方式就是丸光圆和杂货铺。

年终读书计划

最近磨磨唧唧的不怎么想看书,就看了一本《刻意练习》,读完比较有感触,有可能的话会写一点读书笔记。

待看技术书籍:

  1. 《Java核心技术 I》要求涉及到J2E的知识都要过一遍 50%
  2. 《Spring MVC学习指南》阅读一遍
  3. 《重构》这本书买来 之后就一直冬眠着
  4. 《Spring实战》

最近已看的技术书籍:

  1. 《Servlet Jsp 和 Spring MVC初学指南》东西不多 拖延着断断续续看了很久

可以看的闲书:

  1. 《白夜行》以读完 11.12
  2. 《浪潮之巅上下》
  3. 《愿你的青春不负梦想》以为是自传 全是鸡汤 扔了
  4. 《解忧杂货铺》已读完 11.5
  5. 《三体》I读完 11.26
  6. 《一个叫欧维的人决定去死》
  7. 《刻意练习》已读完
  8. 《颠覆者-周鸿祎自传》以读完 12.03
  9. 《区块链技术驱动金融》

聊聊架构之如何写好代码(1)

一开始看《聊聊架构》这本书有点懵的,因为觉得架构就是软件架构,里面提到一些生命周期,听上去学术,但实际上是很有道理的,架构是无处不在的,这里我会总接一些觉得还不错篇章,也作为一次读书笔记吧。

什么是代码

先看一张图image
上面的方形可以理解为软件,结合我自己的编程经验,这就是一个典型的后端软件模型。
这里可以把代码分为三部分:1.访问业务生命周期的代码2.业务逻辑代码。3.存储部分代码
上图的服务就是访问业务生命周期的代码,业务逻辑就是业务。

那什么又是服务呢?

书里的一个例子很形象:客户去银行办业务,接待客户的是银行柜员,而不是专业业务人员。柜员就是一个服务,以用户听的懂的方式去和用户沟通,并把用户的要求转化为业务语言,再由银行内部的专业业务人员执行相应操作,柜员最后把执行结果转化为用户的语言,为其服务。
所以服务就是一个通道,是访问业务的一个通道。

但上面的图暴露了一个很严重问题,过于耦合,服务为完成用户访问生命周期,但上图却承担包括了组合业务和存储这两个还要提供用户访问。用户为完成访问业务逻辑生命周期,需要做的是:

  • 服务首先要把业务的状态从存储中加载。这是一个生命周期,主体为业务状态获取。
  • 服务调用并组合业务逻辑完成业务的访问。这是一个生命周期,主体为业务访问。
  • 服务把业务逻辑执行后的状态保存到存储中。这是一个生命周期,主体为业务状态保存。

这里拿自己的后端代码打个比方,之前为了高效开发,公司的后端代码架构基本就是上面这种架构,也就是MC架构,这里的C端控制器做的工作很多,有业务逻辑,有粘合代码,甚至还包括了存储获取代码。每个业务没有重用性,不过幸好写的是基于restful架构的api,每个业务都是一个接口,
业务代码基本上是独立的。但是业务代码没有重用性可言,所以上面这种模型是很不好的,我们应该弃用。

拆分后的架构

image
拆分后的架构如图所示,可以看出各部分是独立的,黏合代码整合了业务和存储,服务则整合了黏合代码。在实际应用中,服务为控制器中的action,业务在独立的logic层,存储在model层。而黏合代码可以看做一个管理者即XXManager,比如一个订单业务黏合代码就是一个OrderManager类。

为什么要这样做

有些人会问为什么不把存储挂在服务上,这样黏合代码就不需要了。但这样的后果就是让银行的核心人员,直接面接待客户,用户的访问因为沟通效率低就变得非常困难。黏合代码相当于一个具备行为和记忆的完整业务人,不应该直接面对用户。
正确的方式应该是给用户独立的访问通道,就好比银行采用柜台人员来做接待一样。服务相当于柜台是面向用户的。用户的需求是变化最频繁的,服务的方式可以避免频繁的用户需求变化对内部分工的冲击。没有服务的保护会导致用户的需求直接冲击存储,西存储非常脆弱必须保护起来。还有人会问,为何不把存储挂在业务上?这也是可以的,大家把这叫作活动记录( Active record)但这会让关心业务模型的代码人员,受到存储的影响,必然无法专注于业务生命周期上。并且存储的变动,会极大地影响业务生命周期所以一般也不采用这种方式。毕竟内存持久化的问题是计算机体系结构本身的问题,不应该由业务代比码人员来解决。采用存储挂在黏合代码上的方式,可以让黏合代码成为一个完整的虚拟人虚拟人具备记忆和行为,可以均衡地处理上述两个问题。有以上两种方式的好处,而又没有太大的弊病,这才是最合适的。因此代码就划分出了以下几个责任

  1. 服务专注于用户(User)的需求,通过组织黏合代码,也就是虚拟人所提供的生命周期活动完成需求。
  2. 黏合代码专注于管理业务中对象的生命周期,并且通过存储保存或加载业务中对象的状态,实现对业务虚拟人的模拟。
  3. 业务专注于实现业务的生命周期活动。
  4. 存储专注于数据的保存和加载,并让数据和存储设备的存储粒度一一对应。

分工后各个业务都是独立的,不同部分的开发人员可以并行的进行开发,不仅提升力效率而且缩短了时间。比如负责业务逻辑的可以专注与业务逻辑的开发,存储部分独立了那么DBA做一些sql优话也不会影响到业务层。各个部分都是独立的,虽然前期会加大一些工作量,但是职能清晰后的代码是易维护的,能进行单元测试的。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×