自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

PEAK

不懂管理的开发不是好架构

  • 博客(75)
  • 资源 (1)
  • 收藏
  • 关注

原创 REST解惑

本文是「架构风格:你真的懂REST吗?」的补充!REST全称是Representational State Transfer,目前普遍接受的中文翻译为「表述性状态转移」!即使翻译过来了,你依然有一堆疑问:什么是「表述性」的?什么是状态?什么是转移?转移的是什么?所以本文试图回答如下几个问题:为什么要叫REST这个名字?什么是状态、资源、表述?以及它们之间有什么关系?什么...

2018-11-25 21:39:27 219

原创 架构风格:微服务

本文探讨:什么是微服务微服务的约束微服务对架构属性的影响什么是微服务「微服务」是一种架构风格,也就是说,「微服务」是一组架构约束。前面说到REST是一种复合式的架构风格,微服务也是!微服务的约束面更广,它对开发过程和开发人员也进行了约束!微服务的约束MartinFlower在Microservices一文中,详细阐述了微服务所需要具有的约束!- Componenti...

2018-11-16 09:17:47 938

原创 架构风格:你真的懂REST吗?

本文探讨如下几个问题:什么是RESTREST包含哪些约束什么是RESTful纯RESTful API的难点在哪里如果你去搜索「什么是REST」的话,大部分情况下,你看到的基本都是RESTful!这类内容主要说的是:资源URL应该怎么写要用GET来获取资源要用POST来新建资源要用PUT来更新资源要用DELETE来删除资源而实际上REST并不是这些,或者说并不完全是这...

2018-11-09 18:08:07 675

原创 架构风格:万金油CS与分层

计算机科学家David Wheele曾说过这么一句话:All problems in computer science can be solved by another level of indirection意思是:「 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决」。这也是CS架构和分层架构的核心思想!将CS架构和分层架构放在一起讨论除了上面的原因之外,还有如下几个原...

2018-10-30 16:17:48 506

原创 什么是架构属性

本文探讨如下几个问题:什么是架构属性约束和架构属性的关系有哪些架构属性各个架构属性涉及知识点什么是架构属性首先,问个很简单的问题!请看下面的Java代码:class Person { private String name; private int age; public void skill() { ...... }}请问...

2018-10-24 10:16:01 552 1

原创 什么是架构模式和架构风格

本文探讨如下几个问题:架构模式和架构风格有区别吗?什么是架构模式?什么是架构风格?架构模式和架构风格的区别是什么?有哪些架构模式?有哪些架构风格?架构模式=架构风格?如果你搜索「架构模式和架构风格的区别」,你会发现答案千差万别:有的观点认为架构模式和架构风格是一个东西,只是叫法不同有的观点认为架构风格是架构模式的外在表现有的观点认为架构模式和架构风格是不同的两个概念(具...

2018-10-16 09:29:19 2470

原创 什么是软件架构

决策or组成?对于软件架构的定义,软件界并没有一个统一的说法!不过大致可分为「决策」论和「组成」论!其中一个比较著名的「决策」论的定义是Booch,Rumbaugh和Jacobson于1999年提出的:架构就是一系列重要的决策,这些决策涉及软件系统的组织、组成系统的结构化元素及其接口的选择、元素之间协作时特定的行为、结构化元素和行为元素形成更大子系统的组合方式以及引导这一组织(也就是这些元...

2018-10-08 08:56:02 858

原创 如何快速阅读源码

本文探讨在需要了解一个开源项目时,如何快速的理清开源项目的代码逻辑!以下是个人认为行之有效的方法:先「跑起来」自顶向下拆解深入细节延伸改进本文以Mybatis为例来进行演示!先“跑起来”程序界有个老传统,学习新技术时都是从「Hello World」开始的!无论是学习新语言时,打印「Hello World」;还是学习新框架时编写个demo!那为什么这里的「跑起来」要...

2018-04-08 16:39:15 756

原创 基于TODO的开发方法

之前买了一本书,叫《架构探险—从零开始写Java Web框架 》(不推荐购买~),一本标题党书籍!但是我很推崇作者写代码的方式,就是基于TODO的方式进行开发!个人认为以基于TODO的方式进行开发,至少有如下几点优势:有助于理解需求有助于梳理业务流程有助于任务拆解和代码封装TODO即注释更易于进入心流体验同时还能避免如下两种情况:下面我以Blog的创建流程为例,...

2018-03-25 17:25:51 763

原创 Web开发框架推导

本文欲回答这样一个问题:在 「特定环境 」下,如何规划Web开发框架,使其能满足 「期望 」?假设我们的「特定环境 」如下: * 技术层面 * 使用Java语言进行开发 * 通过Maven构建 * 基于SpringBoot * 使用IntellijIDEA作为IDE * 使用Mybatis作为持久层框架 * 前后端分离 * 非技术层面 * 新项目,...

2018-03-04 21:33:34 518

原创 高性能Server---Reactor模型

无处不在的C/S架构在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的!你发邮件用的Outlook,Foxmail等你看视频用的优酷,土豆等你写文档用的Office365,googleDoc,Evernote等你浏览网页用的IE,Chrome等(B/S是特殊的C/S)……C/S架构的软件带来的一个明显的好处就是:只要有网络,你可以在任何地方干同一件事。例如:你在家里使用Of

2017-08-04 08:57:58 379

原创 我的读书方法

你是否有过这样的经历?亦或,终于读完了一本书!这本书讲的什么呢?呃。。。。我在很长一段时间里都有这样的困惑!这种情况导致的结果是,我成了”书籍收藏家”—买的书里没读完的比读完的多得多!一天一本书?!网上有不少网友说自己读书经历,有的一年200多本书,有的一天一本书。我很羡慕他们是怎么做到的?起初我觉得是自己看书的速度太慢了,一个字一个字的看,看到后面忘到前面。和以前背单词很像,aban

2016-06-05 21:08:06 692

原创 从用户体验角度看工具

用户体验作为互联网从业人员,经常会接触到“用户体验”这个词! 我们可能为了一个菜单该放在哪里而争论,或一边苦逼的编码一边骂着SB产品经理! 我们为别人考虑着“用户体验”,但是对自己一直在用的软件,为什么却这么将就呢?软件=工具作为软件开发人员,使用的软件不在少数,我们都称为工具。即为工具,我们好像就不那么纠结难不难用了!好像工具就应该比较难用才对!而实际上,我们为别人做的软件,对别人来说也是工具

2016-04-24 15:40:07 1524

原创 我的管理实践---《人件》读后感

写在前面听说《人件》是很久之前的事了,但一直没读。主要是受到了《人月神话》的影响—《人月神话》一直被奉为经典管理书籍,名声应该比《人件》高,至少我是这么认为的。所以先读了《人月神话》,当时还很好奇,《人月神话》和项目管理有毛线关系?读了才知道,“人月”就是我们说的“人天”!读了大概三分之一,不知道是翻译问题还是作者行文方式不适合我,反正读不下去了,感觉说了那么多废话只是说明了“增加人力无法加快项目进

2016-02-28 16:01:17 3750

原创 实时发布-嵌入式OSGi的应用

场景单机应用已经越来越不能符合目前越来越复杂的产品需求了。即使是小型应用,至少也需要部署2台以上的服务器做集群。且应用必须24小时对外服务,可用性得达到n个9。这就对发布有了更高的要求。也就催生了灰度发布这样的发布过程。而即使是这样,还是需要经历大致如下的发布过程:下载代码打包停止服务器部署启动服务器

2015-11-12 14:55:45 1892

原创 Java环境与语法

简介本文是对如何学习一门编程语言的具体实践。前面说了基础语法是很简单的,如果有语言基础,比较好的方法是过一遍Learn X in Y minutes。下文是在公司给毕业生做培训时的PPT,可做参考!

2015-11-04 20:38:39 426

原创 如何学习一门编程语言

简介未来的应用必然是异构的,绝对不会限定在一门语言上,这就要求我们能根据需要快速的掌握一门语言。本文就个人经历谈一谈如何快速的学习一门编程语言。主要面向已经掌握了一门语言的人。

2015-11-01 22:43:33 1029

原创 Java模块化:jigsaw初体验

简介Java模块化一拖再拖,目前jdk9发布了包含jigsaw的先行版。本文为Project Jigsaw: Module System Quick-Start Guide的简译,及使用感受总结。翻译正文本文提供了一些简单的例子方便开发者熟悉模块化。例子中的文件路径使用反斜杠和冒号分隔。Windows用户请修改为反斜杠和分号。Greetings第一个例子是个叫com.greetings的模块,它只是

2015-10-07 15:10:02 7644

原创 Clojure绘制UML

使用Clojure封装了Graphviz的使用,目前主要实现了UML的绘制使用

2015-06-07 17:18:04 836

原创 自用Java开发框架

框架结构

2015-04-01 19:38:23 743

原创 一图胜千言:JVM

xmind文件下载

2015-03-15 19:15:15 757

原创 一图胜千言:事务管理

xmind文件下载

2015-03-11 20:18:19 795

原创 语言与模式-23迭代器模式

意图提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。适用性访问一个聚合对象的内容而无需暴露它的内部表示。支持对聚合对象的多种遍历。为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。Java实现Java提供了Iterable接口,直接实现此接口即可!public class AList implements Iterable{ ... p

2015-03-11 20:16:38 432

原创 语言与模式-22访问者模式

意图表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。适用性一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor使得你可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,

2015-03-11 20:14:05 418

原创 语言与模式-21解释器模式

意图给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。适用性当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:该文法简单对于复杂的文法, 文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达式, 这样可以节省空间而

2015-03-10 20:22:26 519

原创 语言与模式-19策略模式

意图定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。适用性许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。算法使用客户不应该知道的数据。可使用策略模式以避免暴露复

2015-03-10 20:21:37 501

原创 语言与模式-20中介者模式

意图用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。适用性一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。想定制一个分布在多个类中的行为,而又不想生成太多的子类。Java实现//抽象同事类public abstra

2015-03-10 20:21:25 438

原创 语言与模式-17命令模式

意图将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作适用性像上面讨论的MenuItem对象那样,抽象出待执行的动作以参数化某对象。你可用过程语言中的回调(callback)函数表达这种参数化机制。所谓回调函数是指函数先在某处注册,而它将在稍后某个需要的时候被调用。Command模式是回调机制的一个面向对象的替代品。在不同的时刻指定、

2015-03-10 20:19:43 361

原创 语言与模式-18状态模式

意图允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。适用性一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常, 有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作

2015-03-10 20:19:26 424

原创 语言与模式-16责任链模式

意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。适用性有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。可处理一个请求的对象集合应被动态指定。Java实现public abstract class Handler

2015-03-10 20:18:31 392

原创 语言与模式-15观察者模式

意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。适用性当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之,你不希望这些对象是紧密耦合

2015-03-10 20:16:13 405

原创 语言与模式-14备忘录模式

意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。适用性必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态。如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。Java实现public class Memento { private String stat

2015-03-10 19:42:41 437

原创 语言与模式-13模板模式

意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。适用性一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是Opdyke和Johnson所描述过的“重分解以一般化”的一个很好的例子。首先识别现有代码中的不同之处,并

2015-03-10 19:41:37 364

原创 语言与模式-12享元模式

意图运用共享技术有效地支持大量细粒度的对象。适用性一个应用程序使用了大量的对象。完全由于使用大量的对象,造成很大的存储开销。对象的大多数状态都可变为外部状态。如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。Java实现抽象享元角色类public interfa

2015-03-10 19:40:15 465

原创 语言与模式-11桥接模式

意图将抽象部分与它的实现部分分离,使它们都可以独立地变化。适用性你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新

2015-03-10 19:35:55 485

原创 语言与模式-10装饰模式

意图动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。适用性在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。处理那些可以撤消的职责。当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。Java实

2015-03-10 19:33:33 484

原创 语言与模式-08适配器模式

意图将一个类的接口转换成另外一个客户希望的接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适用性你想使用一个已经存在的类,而它的接口不符合你的需求。你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。

2015-03-10 19:32:36 403

原创 语言与模式-09组合模式

意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。适用性你想表示对象的部分—整体层次结构。你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。Java实现public interface Node { void check(); void add(Node node) throws

2015-03-10 19:32:30 374

原创 语言与模式-07代理模式

意图为其他对象提供一种代理以控制对这个对象的访问。适用性在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用Proxy模式。下面是一些可以使用Proxy模式常见情况:远程代理(Remote Proxy)为一个对象在不同的地址空间提供局部代表。虚代理(Virtual Proxy)根据需要创建开销很大的对象。保护代理(Protection Proxy)控制对原始对象的访问。保护代理用于对象应

2015-03-10 19:30:11 456

原创 语言与模式-05生成器模式

意图将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。适用性当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。当构造过程必须允许被构造的对象有不同的表示时。Java实现// 待构建产品class Starbucks { private String size; private String drink; public void

2015-03-10 19:28:48 414

快学Scala前三章

不错的Scala语言入门书籍,前三章,样章!

2012-12-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除