Martin

DDD之1微服务设计为什么选择DDD

自作多情 提交于 2020-08-05 08:14:35
背景 名词解释 如果你的团队目前正是构建微服务架构风格的软件系统,问自己两个问题? 软件架构演进 软件架构大致经历了从单机架构,集中式架构,分布式微服架构,程序的层次图如下所示。 单机架构 特点如下: 1, 面向过程的设计方法; 2, 结构为CS; 3,程序的层次分两层,即UI层和数据库层; 4, 设计的核心在数据库和字段。 集中式架构 特点如下: 1, 面向对象的设计方法; 2,程序层次为经典的3层架构,即业务接入层, 业务逻辑层,数据库层; 3,部分企业也采用SOA架构风格; 4,集中式的架构缺点:扩展性,伸缩性差,系统容易变得臃肿; 分布式微服务架构 特点: 1, 基于微服务的理念:分而治之,模块高内聚(独立团队,独立部署,独立存储,技术异构),模块之间通过RPC或者HTTP通信,松耦合; 2,模块之间松耦合,解决了扩展性和伸缩性的问题; 架构对比 单体架构和集中式架构,系统分析, 系统设计,系统开发这3个阶段是割裂的,即分属3个不同的人或者小组或者岗位的人负责,这样的后果是: 1, 系统分析,设计,开发三个阶段的信息不一致,导致上线之后功能跟需求偏差非常大; 2, 系统的开发无法快速响应需求和业务的变化,错失发展的良机。 微服务的困局 微服务解决的问题 微服务解决了单体架构和集中式架构的问题:扩展性,弹性伸缩,敏捷开发快速响应业务变化; 但是微服务并非毫无缺陷。

别纠结,提高代码整洁度也没那么难!

我的梦境 提交于 2020-08-04 22:25:59
作者 | Jonathan Fulton 译者 | 弯月,责编 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 几年前,我们曾遇到过重大的代码质量问题: 大多数文件中的逻辑纠缠夹杂、大量重复、没有测试。 无论是编写新功能还是修复很小的bug都需要付出呕心沥血的代价,常常气到你吐血。 令我们苦不堪言。 如今,我们的代码库的整体质量明显提高了,这在很大程度上要归功于我们为提高代码质量而做出的不懈努力。几年前,在发现代码质量问题后,我们整个团队一起阅读了Robert Martin的《代码整洁之道》,然后竭尽全力贯彻了他的建议,甚至引入了“清洁规范”作为工程团队的核心文化。如果你打算扩张团队,那么我强烈建议你现在就开始实施这两项措施。从长远来看,恰当地实施“干净的代码”实践可以提高一倍生产力,并显著提高工程团队的士气。有了选择,谁还会愿意进入上图右边那个Bad code的房间呢? 在我们实施的“清洁规范”以及其他想法之中,有四项措施将团队的生产力和幸福指数提高了80%。 没有经过测试的代码一概不安全。 你需要编写大量测试,尤其是单元测试,否则你会追悔莫及。 选择有意义的名称。 为变量、类和函数选择言简意赅的名称。 类与函数保持最小,遵守单一功能原则 函数不应超过4行,而类不应超过100行。 是的,你没看错。 而且它们应该只做一件事

【译文】【前端架构鉴赏 03】:Angular 与 MVP 模式

╄→尐↘猪︶ㄣ 提交于 2020-07-28 15:48:33
感谢阅读,感谢这几个月来的陪伴,这是今年架构系列的最后一篇。 李熠:【译文】【前端架构鉴赏 01】:Angular 架构模式与最佳实践 ​ zhuanlan.zhihu.com 李熠:【译文】【前端架构鉴赏 02】:可拓展 Angular 2 架构 ​ zhuanlan.zhihu.com 原文: https:// indepth.dev/model-view- presenter-with-angular/ 随着应用程序的日趋庞大,它变得越来越难以维护。随着可复用模块的重要性逐渐递增应用的复杂性也随之增长。我们都意识到我们应该在它面临难以维护的风险之前做些什么 设计模式能够拯救它! 复杂应用 一个复杂应该至少拥有以下某些特征 组件树中的多个组件展示同一份应用状态 拥有多个更新应用状态的来源: 多个用户同时交互 后端实时推送状态更新给浏览器 后台定时任务 近距离传感器或者其它设备传感器 频繁的更新应用状态 大量的组件 代码量大的组件,回想一下之前的 大泥球 般的 AngularJS controller 组件内部的高度复杂循环——高度集中的逻辑分支和异步控制流 但与此同时,我们希望应用是具有可维护的,可测试的,可拓展的和具有良好性能的 复杂的应用很少拥有所有这些宝贵特征。我们也不能在完成高级功能需求的情况下避免这些所有的特征,但是我们可以通过设计应用来最大化利用它的宝贵特征 译者注

DDD之1微服务设计为什么选择DDD

我只是一个虾纸丫 提交于 2020-07-28 04:26:48
背景 名词解释 如果你的团队目前正是构建微服务架构风格的软件系统,问自己两个问题? 软件架构演进 软件架构大致经历了从单机架构,集中式架构,分布式微服架构,程序的层次图如下所示。 单机架构 特点如下: 1, 面向过程的设计方法; 2, 结构为CS; 3,程序的层次分两层,即UI层和数据库层; 4, 设计的核心在数据库和字段。 集中式架构 特点如下: 1, 面向对象的设计方法; 2,程序层次为经典的3层架构,即业务接入层, 业务逻辑层,数据库层; 3,部分企业也采用SOA架构风格; 4,集中式的架构缺点:扩展性,伸缩性差,系统容易变得臃肿; 分布式微服务架构 特点: 1, 基于微服务的理念:分而治之,模块高内聚(独立团队,独立部署,独立存储,技术异构),模块之间通过RPC或者HTTP通信,松耦合; 2,模块之间松耦合,解决了扩展性和伸缩性的问题; 架构对比 单体架构和集中式架构,系统分析, 系统设计,系统开发这3个阶段是割裂的,即分属3个不同的人或者小组或者岗位的人负责,这样的后果是: 1, 系统分析,设计,开发三个阶段的信息不一致,导致上线之后功能跟需求偏差非常大; 2, 系统的开发无法快速响应需求和业务的变化,错失发展的良机。 微服务的困局 微服务解决的问题 微服务解决了单体架构和集中式架构的问题:扩展性,弹性伸缩,敏捷开发快速响应业务变化; 但是微服务并非毫无缺陷。

RSA Conference 2020 APJ为全球观众提供虚拟学习体验活动,领先专家畅谈网络安全的未来工作

吃可爱长大的小学妹 提交于 2020-07-28 02:46:29
一年一度的区域网络安全行业大会包含超过 76 场分会,吸引 1.4 万余人次报名,参加为期三天的虚拟学习体验活动 新加坡--( 美国商业资讯 )--全球领先的信息安全会展活动 RSA Conference 宣布,其第八次区域活动圆满结束,出于公共卫生和安全因素考虑,此次活动改为以虚拟学习体验的方式举办。参与者在线上齐聚一堂,参加为期三天的大会,通过专家主导的主旨演讲、专题会议和互动环节探讨最新的网络安全威胁和趋势。 大会吸引了来自142个国家和地区超过 1.4 万人次注册报名,全球参与人数较多的地区包括新加坡、印度、澳大利亚、日本、美国、菲律宾、香港、加拿大和马来西亚。 RSA Conference 高级总监兼总经理 Linda Gray Martin 表示 :“尽管我们周围全世界的形势不断变化,我们仍然努力将网络安全界聚集在一起,共同交流想法和独特的观点,因为大家相互学习借鉴是我们行业变得更加强大的唯一途径。” Martin继续道:“在过去的三天,人的因素真的非常明显,我们在今年虚拟大会上看到的积极反响和参与度让我们备受鼓舞。由于未来可能采用混合型活动的模式,我们期待在2021年让RSA Conference以更大的规模、更好的方式回到亚洲舞台。” 在 RSA Conference 2020 APJ 上,专家们就如何在 COVID-19 后的世界实现网络安全畅所欲言

Spring Cloud 微服务架构的五脏六腑

大兔子大兔子 提交于 2020-07-28 01:35:29
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件。 注:Spring Boot 简单理解就是简化 Spring 项目的搭建、配置、组合的框架。因为与构建微服务本身没有直接关系,所以本文不对 Spring Boot 进行展开。 另外本文有一些例子涉及到 Spring 和 Spring Boot,建议先了解一下 Spring 和 Spring Boot 再阅读本文。 本文的阅读对象主要是没有接触过服务架构,想对其有一个宏观的了解的同学。 本文将从 Spring Cloud 出发,分两小节讲述微服务框架的「五脏六腑」: 第一小节「服务架构」旨在说明的包括两点,一服务架构是什么及其必要性;二是服务架构的基本组成。为什么第一节写服务架构而不是微服务架构呢?原因主要是微服务架构本身与服务架构有着千丝万缕的关系,服务架构是微服务架构的根基。 第二小节「五脏六腑」则将结合 Spring Cloud 这个特例来介绍一个完整的微服务框架的组成。 「服务架构」 为了方便理解,我先讲一个小故事:(改编自一知乎答主) Martin(微服务提出者也叫 Martin)刚来到公司时是一个基层员工,它上面有经理、老板,那个时候所有人都听老板的指挥。 但是过了两年,公司的人越来越多,原来的模式下整个公司的运作效率太低,管理也很混乱。

史上首次!考古学家利用探地雷达“透视”古罗马地下城,发现惊人细节

試著忘記壹切 提交于 2020-07-27 13:06:24
  古代罗马城镇法莱里·诺维(Falerii Novi)位于罗马以北约 31 英里处,随着上千年时间的流逝,曾经的繁华最终被埋葬,如今只剩断壁残垣。   按照以前的考古方式,需要对这座“地下城”进行大面积挖掘工作才能还原出一个粗略的原貌, 而在最新的一项考古活动中,来自剑桥大学的考古学家们使用先进的探地雷达(GPR),首次绘制出了埋在地下的整个城镇 3D 图,并发现了“惊人的细节”。    他们甚至能够通过对不同深度的场地进行成像,来了解该城镇从公元前 241 年建造到中世纪被废弃期间是如何演变的。   研究人员认为,这可能会揭示该地区古罗马城市街道、建筑物以及古人生活习性的更多细节,有望改变我们对此类遗址工作方式的探索。研究论文日前发表在 Antiquity 杂志上,这是一本世界考古学界的同行评审期刊。      图|法莱里·诺维的地理位置(来源:Cambridge)   这个埋藏在地下的城镇,不禁让人们联想到另一座古罗马城市“庞贝”。   庞贝城曾经繁华兴旺,在公元 79 年被维苏威火山爆发时厚达 6 米的火山灰所掩埋,一夜之间,它的名字和位置被灾难抹除,直到 1594 年才被人偶然发现遗迹,大规模考古工作从 1748 年起发掘持续至今,为世人了解古罗马社会生活和文化艺术提供了宝贵资料,被誉为是世界十大古墓稀世珍宝之一。    探地雷达数据显示,法莱里

高级程序员到底是什么样子?

孤者浪人 提交于 2020-07-27 08:31:41
我们的中国文化,对“面子”看得特别重,所以你会发现身边到处都是高级 XXX,听着倍儿有面子,程序员也不例外。 但是你真要问每个人,你认为的高级 XXX 是什么样子的,估计每个人都有不同的回答。 我还记得在我刚开始从事编程工作的时候,对坐在边上不远的那位我心目中的高级程序员的印象是: 工作至少有 6、7 年以上,能写一个用起来很方便、看起来很牛逼、但是不太容易让初级人员看懂的框架。 前两天,我把这个问题丢到群里,大家给出的答案中,占比最高的是以下几个。 有 N 年以上编程经验(大部分都说 5 年以上) 有出版过技术图书 对某领域内对常用框架原理有了解,并且实际使用超过 2 年 可以随时随地快速写出常见的一些算法 至少封装过一个被全局使用的开发框架 写出来的代码,阅读起来很好理解 能带领其他人员成功完成项目 你看,这件事对大家来说就是常说的,“一千个人眼中有一千个哈姆雷特”。 不过这也正常,毕竟像初级、中级、高级这种高度抽象的词汇,想要得到一个可描述的定义与人交流,必然需要夹杂着个人的主观因素。 但是很多行业都在这么进行分类,自然有它的道理和好处。 我觉得 其中最大的一个好处恰好是“主观”的附属品——弹性 。 比如,我现在想招一位高级程序员,面试的时候不管是通过还是不通过,我都有理由来解释我对“高级”的定义。如此一来,我对陌生人的判断就有了更大的“弹性”。 这其实是面试官的一种权利

java书籍推荐[转]

心不动则不痛 提交于 2020-07-26 23:26:16
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。下面就按照学习顺序,给大家推荐下面这些JAVA书籍。 一、Java编程入门类,选择大于努力,入门太重要。 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对 Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然”。 1.《JAVA编程思想》在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java编程思想》是一本让你知其所以然的好书,它 对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太 厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深入看就可以了。推荐一个java群,名字是java从入门到精通,第一组是二二零,第二组是一四二,第三组是九零六,里面有大量视频资料,欢迎java爱好者加入学习。 2.《Agile Java》中文版,这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的 过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新

新预装了 Ubuntu 20.04 LTS 的戴尔 XPS 13 开发者版笔记本上市

半腔热情 提交于 2020-07-26 05:55:49
是否一直在等待预装 Ubuntu 20.04 LTS 的新戴尔 XPS 13 开发者版的消息?好吧,你很幸运,因为戴尔已经宣布了! 对于戴尔 XPS 13 开发者版,你可能不需要太多的介绍。这个笔记本电脑系列在许多方面都受到 Linux 开发人员的欢迎,就像 IBM 著名的 ThinkPad 系列(最近也 受到 Ubuntu 的青睐 )一样。 戴尔开发者笔记本的最新迭代产品预装了 Ubuntu 20.04 LTS。该设备标榜了一个与 Ubuntu “兼容”的内置指纹识别器(开发人员正在向后移植新的 指纹登录改进功能 )以及其他一些功能。 规格方面,这款笔记本提供了一块 13.4 寸非触控的 InfinityEdge 显示屏(1920×1200,16:10)的标准配置。可以将其换成同一面板的触控版,也可以换成配备触控功能的像素组合版的 13.4″ UHD+(3840×2400)InfinityEdge 显示屏,不过这种替换会让价格上涨不少。 基本款宣传的是第十代英特尔酷睿 i5-1035G1 处理器,1.00 GHz(3.6 GHz 睿频加速)。再多花点钱,可以让你换成更气派的第十代英特尔酷睿 i7-1065G7 处理器,1.3GHz(3.9GHz 睿频加速)。这两款 CPU 都是四核。 图形性能取决于你选择的处理器。i5 配置配备了集成的英特尔 UHD 图形芯片,而第十代英特尔