网易新闻App架构重构实践:DDD正走向流行 https://mp.weixin.qq.com/s/FdwrT_xn3CQqpWoRVBttvQ 小智 InfoQ 2020-05-14 作者 | 小智嘉宾 | 李云鹏当前,大多数移动开发团队选择以 MVP 作为业务层的核心架构模型,在此基础上实现了客户端的组件化.插件化.容器化等,但作为业务层核心的 MVP 架构模式至今仍有诸多弊端.网易新闻 App 在领域驱动设计(DDD)思想指导下,对其架构做了整体重构,得到了不错的重构质量与项目收益.移动端…
可能是我们共同的强迫症,不要说看到,就算想到太多的try-catch也很难接受. 于是,开始了一些尝试,这些尝试都算是思维的锻炼.场面的见识.经验的积累. Version1 —— 原始版本 一开始,在ConcreteService中,拥有了太多的try-catch,而影响码字的兴趣. 代码 原始代码 /// <summary> /// 契约 /// </summary> public interface IUpdateManyManyThingContract { bool Upd…
最近新接了一个业务系统——社区服务系统,为了快速熟悉和梳理老系统的业务逻辑和代码,同时对老系统代码做一些优化,于是打算花上一个月时间不间断地对老系统服务进行重构.同时,考虑到社区业务的复杂性,想起了之前做用户系统时尝试过的领域驱动建模(简称DDD,英文全称为:Domain Driven Design),思量之下,觉得DDD非常时候这种复杂业务逻辑的系统.毫不迟疑,开搞! 之前在做用户系统时,也尝试使用DDD进行业务建模,但迫于项目工期压力,没有进行深入的学习和建模,最后效果不是很理想,为了避免重…
​1.导读 高德启动Go业务建设已经有段时间了,主要包含Go应用落地,Go中间件建设,云原生三个部分.经过持续的发力,在这些方面取得了不错的进展.高德Go业务落地过程是如何实现的,遇到过哪些问题,如何解决?本文将为大家介绍相关经验,希望对感兴趣的同学有所帮助. 2. 高德为什么要落地Go应用 现在高德内主流的语言还是Java,Java应用最多,机器数十分惊人.而且高德整体业务也在快速向前奔跑,成本增加的速度非常快.在减少机器负载方面,Go语言在语言级别对Java语言有相当优势.减少机器成本是我们…
前言 代码重构是业内经常讨论的一个热门话题,重构指的是在不改变代码外部行为的情况下进行源代码修改,所以重构之前需要考虑的是重构后如何才能保证外部行为不改变.对于后端代码来说,可以通过大量的自动化测试来确保重构后的代码逻辑,可对于普遍缺乏自动化测试的前端代码来说,重构之前一定要考虑再三才能下手. 有效地重构代码 我曾经有一次不算太成功的前端重构经历,所幸的是没有导致太大的问题,但教训是惨痛的.此次重构的项目本身没有足够的自动化测试,尤其是针对前端的自动化测试,所以在重构之前也预想到了重构的风险.先…
来源 文中会讲述我从0~1搭建一个前后端分离的vue项目详细过程 Feature: 一套很实用的架构设计 通过 cli 工具生成新项目 通过 cli 工具初始化配置文件 编译源码与自动上传CDN Mock 数据 反向检测server api接口是否符合预期 前段时间我们导航在开发一款新的产品,名叫 快言,是一个主题词社区,具体这个产品是干什么的就不展开讲了,有兴趣的小伙伴可以点进去玩一玩~ 这个项目的1.0乞丐版上线后,需要一个管理系统来管理这个产品,这个时候我手里快言项目的功能已经上线,暂时没…
本文主要了在社区服务系统(ECO)中基于SpringMVC+mybatis框架对DDD的落地实现.本文为系列文章中的其中一篇,其他内容可参考:通过业务系统的重构实践DDD. 框架实现图 该框架实现基本和DDD的指导思想契合,主要分为四层,且将关注点放在了domain层.下面将逐层介绍各个组件的职责. 框架详述 User Interface层 门面层,对外以各种协议提供服务,该层需要明确定义支持的服务协议.契约等.包含: dto 包括request和response两部分,通过它定义入参和出参的契…
本文结合团队在ECO(社区服务系统)业务建模过程中的实践经验,总结得到一些DDD业务建模的小招数,不一定是完美的,但是对我们团队来说很有效用,希望能帮到其他人.后面会陆续将项目中业务建模的一些经典例子放上来,分享给大家. ECO系统是线上旧系统,它的建模过程有别于新系统的业务建模.由于背着历史包袱,ECO的建模过程不是那么纯粹,很容易受到旧代码的影响,陷入代码的细节中,初期举步维艰,靠着小步快跑的方式得到了一些雏形和方法论,后面越来越顺,效果还是不错的. 本文为[DDD]系列文章中的其中一篇,其…
20155314 2016-2017-2 <Java程序设计>实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验知识点总结 (一)敏捷开发与XP 软件工程:把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程 软件工程包括以下领域: 软件需求分析 软件设计 软件构建 软件测试 软件维护 软件开发流程:人们在开发.运营.维护软件的过程中有很多技术.做法.习惯和思想体系.软件工程把这些相关的技术和过程统一到一个体系中,叫"软件开发流程"…
美团外卖平台化复用主要是指多端代码复用,正如美团外卖iOS多端复用的推动.支撑与思考文章所述,多端包含有两层意思:其一是相同业务的多入口,指美团外卖业务需要在美团外卖App(下文简称外卖App)和美团App外卖频道(下文简称外卖频道)同时上线:其二是指平台上各个业务线,美团外卖不同业务线都依赖外卖基础服务,比如登陆.定位等.多入口及多业务线给美团外卖平台化复用带来了巨大的挑战,本文将在美团外卖Android平台化架构演进实践文中“代码复用”章节的基础上,进一步详细地介绍平台化复用工作面临的挑战以…
一.问题场景 Angular的双向绑定给我们开发提供了很大的遍历,将父scope的引用变量作为参数传递给子指令,这样就可以方便的在父作用域内进行业务操作,数据变更会自动传递到子指令.但是如果你基于一个已有的复杂业务模块进行扩展开发,同时要将耦合其中一个功能提取为指令,这个时候就涉及到参数的传递问题.最简的方式就是直接将已有的根数据对象作为参数直接传递过去,参数携带数据大而全,指令内部肯定数据够用不会报错,但是缺点就是参数结构复杂,使用者无法准确的连接所需参数,极大地降低了指令的可用性: 二.问题…
一.背景 随着项目逐渐扩展,业务功能越来越多,代码量越来越多,开发人员数量也越来越多.此过程中,你是否有过以下烦恼? 项目模块多且复杂,编译一次要5分钟甚至10分钟?太慢不能忍? 改了一行代码 或只调了一点UI,就要run整个项目,再忍受一次10分钟? 合代码经常发生冲突?很烦? 被人偷偷改了自己模块的代码?很不爽? 做一个需求,发现还要去改动很多别人模块的代码? 别的模块已实现的类似功能,自己要用只能去复制一份代码再改改? "这个不是我负责的,我不管",代码责任范围不明确? 只做了一…
注:初入职场,作为一个程序员,要融入项目组的编程风格,渐渐地觉得系统地研究下如何写出整洁而高效的代码还是很有必要的.与在学校时写代码的情况不同,实现某个功能是不难的,需要下功夫的地方在于如何做一些防御性的代码设计等,以使得自己写出的代码能够应对各种意外的情况. BTW,通过阅读发现了“整洁代码之道”相关的几篇写得还不错的文章,挑出一些感兴趣的地方以提醒自己,提升代码的健壮性.高效性等. (1)整洁代码之道——重构 (文章来源:http://www.infoq.com/cn/articles/cl…
前面分享了前端入门资源汇总,今天分享下前端所有的知识体系. 个人站长对个人综合素质要求还是比较高的,要想打造多拉斯自媒体网站,不花点心血是很难成功的,学习前端是必不可少的一个环节, 当然你不一定要成为前端专家,但是你至少要懂前端才行,这样等网站做大之后你招人才能找到合适的人才,有一双慧眼很重要. 综合类 综合类 地址 前端知识体系 http://www.cnblogs.com/sb19871023/p/3894452.html 前端知识结构 https://github.com/JacksonT…
hadoop资料 云端云计算2G基础课程 (Hadoop简介.安装与范例) 炼数成金3G视频分享下载 虚拟机三种网络模式该如何上网指导此为视频 Hadoop传智播客七天hadoop(3800元)视频,持续更新 Hadoop传智播客最新的hadoop学习资料第一季(1)需要简单了解Linux操作系统(本课程使用CentOS6.4操作系统):(2)需要java基础,因为hadoop是java语言写的,课程中会对hadoop源码进行简析.第一天资料:传智播客hadoop教程01-课程介绍以及hadoo…
转:https://github.com/jsfront/src/blob/master/qq.md 这本来是我QQ群内部的一份公共约定的日常交流规则,后来得到大伙的一致认可,并用实际行动来捍卫它,使我倍受感动. 后来想:传播使爱更有力量,阅读使内心更为坚强,沉淀使生活更为醇香,分享使人更为谦卑或快乐.因为快乐,所以分享. 知识资源来源于互联网,应该返回给互联网,使看到的每一个人受益,也可以供其它各个行业的群主参考. 规则会不断的修改调整,你不在是一个受益者,更是一个项目参与者内容规则的创造者,…
2.1 特性 本章将介绍一系列Gradle的特性. 申明式构建和基于约定的构建 Gradle的核心是基于Groovy呈现了一种丰富的针对特定领域的语言,称之为Domain Specific Language(DSL).通过自由的申明式语言元素,Gradle将申明式构建推向了一个新的高度.这些元素也提供了基于约定构建的功能,用于支持Java,Groovy,OSGI,Web和Scala项目.而且,这种申明式语言是可以扩展的.你可以增加一些新的元素,或者对已有的元素进行增强,以此实现简明的,易于维护和…
Android 插件化 ——指将一个程序划分为不同的部分,比如一般 App的皮肤样式就可以看成一个插件 Android 组件化 ——这个概念实际跟上面相差不那么明显,组件和插件较大的区别就是:组件是指通用及复用性较高的构件,比如图片缓存就可以看成一个组件被多个 App共用 插件的方式只有三种:1,apk安装,2,apk不安装,3,dex包 滴滴插件化项目VirtualAPK开源!https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&mid=22474…
本篇文章内容来自2016年TOP100summit途牛旅游网高级架构师,技术委员会开发组长赵国光的案例分享.编辑:Cynthia 导读:价格中心系统是途牛网众多系统中很重要的一个,几乎所有的售卖价格计算都由此系统产生.初期由于缺乏合理设计,无法及时满足业务高速增长的需求,出现价格计算速度慢.系统不稳定.增加功能困难等问题,系统面临巨大压力,在这种情况下我们启动了系统优化.经过优化系统的稳定性得到巨大提升,特殊场景下的性能提升为原来的几十倍,平均性能提升为原来的几倍.本文将就途牛价格中心系统的优化…
1.0.0 Summary Tittle:[Java]-NO.20.Exam.1.Java.1.001-[1z0-807] Style:EBook Series:Java Since:2017-10-22 End:.... Total Hours:... Degree Of Diffculty:2 Degree Of Mastery:2 Practical Level:2 Desired Goal:2 Archieve Goal:.... Gerneral Evaluation:... Writ…
Android 插件化 ——指将一个程序划分为不同的部分,比如一般 App的皮肤样式就可以看成一个插件 Android 组件化 ——这个概念实际跟上面相差不那么明显,组件和插件较大的区别就是:组件是指通用及复用性较高的构件,比如图片缓存就可以看成一个组件被多个 App共用 插件的方式只有三种:1,apk安装,2,apk不安装,3,dex包 滴滴插件化项目VirtualAPK开源!https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&mid=22474…
综合类 综合类 地址 前端知识体系 http://www.cnblogs.com/sb19871023/p/3894452.html 前端知识结构 https://github.com/JacksonTian/fks Web前端开发大系概览 https://github.com/unruledboy/WebFrontEndStack Web前端开发大系概览-中文版 http://www.cnblogs.com/unruledboy/p/WebFrontEndStack.html Web Fron…
一. 资源教程: 综合类 前端知识体系 前端知识结构 Web前端开发大系概览 Web前端开发大系概览-中文版 Web Front-end Stack v2.2 En类资源汇总 免费的编程中文书籍索引 前端书籍 前端免费书籍大全 免费的编程中文书籍索引 智能社 - 精通JavaScript开发 重新介绍 JavaScript(JS 教程) 麻省理工学院公开课:计算机科学及编程导论 JavaScript中的this陷阱的最全收集--没有之一 JS函数式编程指南 JavaScript Promise迷…
最近一直关注VueConf全球首届Vue.js开发者大会,现在将此次开发者大会资料整理如下: 一.Vue 2017 现状与展望   [尤雨溪] 在线视频: PPT整理: Vue 2017 现状与展望 二.Vue SSR和API Proxy层深度实践   [桑世龙] 在线视频: PPT整理:Vue SSR和API Proxy层深度实践 三.用比较性思维谈工程化在Vue.js的优雅设计   [张耀春] 在线视频: PPT整理:用比较性思维谈工程化在Vue.js的优雅设计 四.掘金 Vue.js 2.…
推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 在将业务进行模块化时,避免不了模块页面路由和模块通信, 大多数我们会用到ARouter,EventBus三方库. 模块化过程中有一个尴尬的问题摆在面前:Event事件.Router path放在哪里? 因为很多业务module都需要收发Event事件,进行页面路由,所以只能将Event, Router path下沉到基础库. 这样导致的结果是基础库越来越大,至多…
http://2016.qconshanghai.com/schedule 大会日程 2016年10月20日 星期四 07:45 开始签到 09:00 开场致辞 专题 前端技术实践 主题演讲 业务上云技术拆解(厂商共建) 大数据应用与系统优化实践(厂商共建) 微服务架构,我们该如何实践? 地点 百宴厅1 百宴厅2-4 宴会厅1 宴会厅2 宴会厅3 出品人 贺师俊   孟夕 孟夕 杨波 09:30 <Vue 2.0: 渐进式前端解决方案> Vue Technology LLC 创始人, Vue.…
github上最全的资源教程-前端涉及的所有知识体系[转自:蓝猫的博客] 综合类 综合类 地址 前端知识体系 http://www.cnblogs.com/sb19871023/p/3894452.html 前端知识结构 https://github.com/JacksonTian/fks Web前端开发大系概览 https://github.com/unruledboy/WebFrontEndStack Web前端开发大系概览-中文版 http://www.cnblogs.com/unrule…
文章大纲 一.项目模块化初步介绍二.项目模块化的两种模式与比较三.大型项目模块化的演进四.项目模块化总结五.参考文章   一.项目模块化初步介绍 1. 前言 在Android开发中,随着项目的不断扩展,项目会变得越来越庞大,而随之带来的便是项目维护成本与开发成本的增加!每次调试时,不得不运行整个项目:每当有新成员加入团队时,需要更多的时间去了解庞大的项目...而为了解决这些问题,团队通常会将项目模块化,以此来降低项目的复杂度和耦合度,让团队可以并行开发与测试,让团队成员更加专注于自己所负责的功能…
可通过多种方式在 Dreamweaver 中处理代码. 您可以使用“新建文档”对话框打开新的代码文件,然后开始键入您的代码. 在 Dreamweaver 中创建新的代码文件 键入时,会显示代码提示以帮助您选择代码和避免打字错误.如果需要,可使用 Dreamweaver 的有用的快捷文档获取 CSS 的相关帮助. 还可以使用插入面板或使用编码快捷方式(如 Emmet 缩写)插入代码. 如果您发现自己多次复制并粘贴同一段代码,请尝试以下省时功能: 代码片段面板对于快速创建预先格式化的代码片段并将其插…
读<Effect Java中文版> 译者序 序 前言 第1章引言 1   第2章创建和销毁对象 4 第1条:考虑用静态工厂方法代替构造函数 4 第2条:使用私有构造函数强化singleton属性 8 第3条:通过私有构造函数强化不可实例化的能力 10 第4条:避免创建重复的对象 11 第5条:消除过期的对象引用 14 第6条:避免使用终结函数 17   第3章对于所有对象都通用的方法 21 第7条:在改写equals的时候请遵守通用约定 21 第8条:改写equals时总是要改写hashCod…