Share架构的一些心得
个人这些年,从web->system service->app 项目实战,陆陆续续经历的项目很多,自己也数不清。自己也一直对于架构没有明确去给出一个自己的定义描述。
刚好最近一直在flutter折腾,感触良多,就整理了自己对于架构的心得体验。
架构说直白一些就是3步套路(抽象、分治、演化)的走法就可以设计出一个不算差的架构,这些年经历和设计出的项目,于我而言,架构无非2类实现方式,它们都殊途同归:一种是直接抽出核心点,简化逻辑,实现最小功能逻辑验证可行性,然后推出宏观架构,一切围绕核心点去架构(自底向上);,另一种方法就是直接宏观方向进行架构,拆分出业务组件、模块,梳理之间的关系流程得出基础架构,再根据基础架构快速实现各基础模块来验证和改进。(自顶向下),
以上2种方式虽然顺序不同,但是都是围绕【架构核心】的3个点进行:
1)抽象—>分层:抽象在我看来,就是一句话:跳出细节去思考总结,产生概念性的标记对象,宏观去描述业务逻辑。而分层,是从也是宏观去实现,每一层为解决特定领域问题而产生的解决方案,为向上提供服务,有些层会贯穿其他层提供服务,就可以认为是共享层,比较容易理解分层的就是mvc。
2)分治:是应对和管理复杂业务的通常手段,有句经典“一切皆接口”,越是编码,越有这样的体会,分治在我看来就是大问题无法解决,就拆分小问题,通过类似接口、方法、事件等手段分解之后将小问题组合起来的解。
3)演化:社区也经常有人讨论演化和架构的关系,社区有2种主流:偏架构方法流,还有一种就是偏演化流,在我看来演化是架构去其糟糠取其精华的体现,个人比较喜欢,只有经历过版本的架构(抽象、分治)才能有演化这一步,不断演化才能优化出一套最适合团队的输出物。又比如微服就可以算是演化流,但是从宏观去考虑,微服务又是先架构后演化,后期的演化会推动架构的不断进化。
Share架构的一些心得的更多相关文章
- 架构实战项目心得(九):后台服务工具ldap:统一用户中心ldap工具使用以及安装
一.安装OpenLDAP 1.安装 yum -y install openldapopenldap-servers openldap-clients openldap-devel compat-ope ...
- 架构实战项目心得(六):后台服务nosql数据库mongodb
一.架构介绍 mongodb有几种部署方式,这里采用的是副本集架构(Replica Set). 为了防止单点故障就需要引副本(Replication),当发生硬件故障或者其 ...
- YouTube 网站的架构演进——阅读心得
基础平台 Apache Python Linux(SuSe) MySQL psyco,一个动态的Python到C的编译器 lighttpd代替Apache做视频播放 状态 支持每天超过5亿的视频点击量 ...
- 架构实战项目心得(十四):spring-boot结合Swagger2构建RESTful API测试体系
一.添加依赖: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-s ...
- 架构实战项目心得(十一):基于spring-security-oauth2的mysql数据表设计
一.建立数据库及数据表结构 CREATE SCHEMA IF NOT EXISTS `oauth2` DEFAULT CHARACTER SET utf8 ; USE `oauth2` ; -- -- ...
- 架构实战项目心得(十):基于spring-ladp的统一用户中心结构设计以及代码结构设计
一.目录设计 1 公司 2 部门 3 注册人员 4 层级人员 二.规则 1 注册 自行注册人员放到模拟公司的目录下,等所属公司组织结构建立完毕,将此人员迁移到所属公司(或者删除此人员,所属公司新建此人 ...
- 架构实战项目心得(八):dubbo知识的整理
1 Dubbo启动时检查.集群容错.负载均衡.线程模型的设置以及选项: 启动时检查:(1)Dubbo默认会在启动的时候检查依赖的服务是否可用,不可用时会抛出异常.阻止Spring初始化完成.以便 ...
- 架构实战项目心得(七):使用SpringBoot+Dubbo+Mybatisplus+Oracle搭建后台项目框架(二)
接下来我们将整合mybatisplus+Oracle,实现一个简单的查询.(期间踩了很多坑,遇到一些问题,还好慢慢解决了.现在是通过配置文件的方式来进行dubbo服务的注册和发布,希望以后能在学习和实 ...
- 架构实战项目心得(六)(补):mongodb.conf参数详解
--dbpath 数据库路径(数据文件)--logpath 日志文件路径--master 指定为主机器--slave 指定为从机器--source 指定主机器的IP地址--pologSize 指定日志 ...
随机推荐
- Angular5 import interface 报错:XXX is not a module
在项目里定义了一个interface,device.ts.然后在component.ts中要使用这个interface,import之后,VSCode报错:‘xxx/xxx/xxx/device.ts ...
- python基础-6.1 match search findall group(s) 区别
import re # match findall经常用 # re.match() #从开头匹配,没有匹配到对象就返回NONE # re.search() #浏览全部字符,匹配第一个符合规则的字符串 ...
- 在Keras中用Bert进行情感分析
之前在BERT实战——基于Keras一文中介绍了两个库 keras_bert 和 bert4keras 但是由于 bert4keras 处于开发阶段,有些函数名称和位置等等发生了变化,那篇文章只用了 ...
- [Markdown] 03 进阶语法 第一弹
目录 1. YMAL 题头 2. 缩写 3. 强调 4. 自定义 <div> 标签 5. <cite> 标签 5. <code> 与 <br> 标签 6 ...
- 牛客练习赛51 C 勾股定理https://ac.nowcoder.com/acm/contest/1083/C
题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形. 输入描述: 一个整数n. 输出描述: 另外两条边b,c.答案不唯一,只要输出任意一组即为合理, ...
- 2019牛客暑期多校训练营(第四场) - K - number - dp
https://ac.nowcoder.com/acm/contest/884/K 一开始整了好几个假算法,还好测了一下自己的样例过了. 考虑到300的倍数都是3的倍数+至少两个零(或者单独的0). ...
- TP中如何去掉index.php
使用过TP的同学都知道,在URL始终会有index .php 我们如何才能够去掉呢? 1. 确认httpd.conf配置文件中加载了mod_rewrite.so模块 2. AllowOverride ...
- jquery的点击事件
一.任务需求:两个按钮,一个DIV,点击显示按钮显示DIV,点击隐藏按钮,隐藏DIV. 二.任务分析:监听按钮的点击,操作DIV的显示隐藏效果. 三.代码实现: <body> <bu ...
- Python之路-初识python及环境搭建与测试(Python安装、Anaconda安装、PyCharm安装)
一.认识Python 起源 Python的作者是著名的“龟叔”Guido van Rossum,他希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻 ...
- HBase的访问方式
这里只介绍三种最常用的方式 1.HBase shell HBase的命令行工具是最简单的接口,主要用于HBase管理 首先启动HBase 帮助 hbase(main):001:0> help 查 ...