个人这些年,从web->system service->app 项目实战,陆陆续续经历的项目很多,自己也数不清。自己也一直对于架构没有明确去给出一个自己的定义描述。

刚好最近一直在flutter折腾,感触良多,就整理了自己对于架构的心得体验。

架构说直白一些就是3步套路(抽象、分治、演化)的走法就可以设计出一个不算差的架构,这些年经历和设计出的项目,于我而言,架构无非2类实现方式,它们都殊途同归:一种是直接抽出核心点,简化逻辑,实现最小功能逻辑验证可行性,然后推出宏观架构,一切围绕核心点去架构(自底向上);,另一种方法就是直接宏观方向进行架构,拆分出业务组件、模块,梳理之间的关系流程得出基础架构,再根据基础架构快速实现各基础模块来验证和改进。(自顶向下),

以上2种方式虽然顺序不同,但是都是围绕【架构核心】的3个点进行:

1)抽象—>分层:抽象在我看来,就是一句话:跳出细节去思考总结,产生概念性的标记对象,宏观去描述业务逻辑。而分层,是从也是宏观去实现,每一层为解决特定领域问题而产生的解决方案,为向上提供服务,有些层会贯穿其他层提供服务,就可以认为是共享层,比较容易理解分层的就是mvc。

2)分治:是应对和管理复杂业务的通常手段,有句经典“一切皆接口”,越是编码,越有这样的体会,分治在我看来就是大问题无法解决,就拆分小问题,通过类似接口、方法、事件等手段分解之后将小问题组合起来的解。

3)演化:社区也经常有人讨论演化和架构的关系,社区有2种主流:偏架构方法流,还有一种就是偏演化流,在我看来演化是架构去其糟糠取其精华的体现,个人比较喜欢,只有经历过版本的架构(抽象、分治)才能有演化这一步,不断演化才能优化出一套最适合团队的输出物。又比如微服就可以算是演化流,但是从宏观去考虑,微服务又是先架构后演化,后期的演化会推动架构的不断进化。

Share架构的一些心得的更多相关文章

  1. 架构实战项目心得(九):后台服务工具ldap:统一用户中心ldap工具使用以及安装

    一.安装OpenLDAP 1.安装 yum -y install openldapopenldap-servers openldap-clients openldap-devel compat-ope ...

  2. 架构实战项目心得(六):后台服务nosql数据库mongodb

    一.架构介绍        mongodb有几种部署方式,这里采用的是副本集架构(Replica Set).        为了防止单点故障就需要引副本(Replication),当发生硬件故障或者其 ...

  3. YouTube 网站的架构演进——阅读心得

    基础平台 Apache Python Linux(SuSe) MySQL psyco,一个动态的Python到C的编译器 lighttpd代替Apache做视频播放 状态 支持每天超过5亿的视频点击量 ...

  4. 架构实战项目心得(十四):spring-boot结合Swagger2构建RESTful API测试体系

    一.添加依赖: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-s ...

  5. 架构实战项目心得(十一):基于spring-security-oauth2的mysql数据表设计

    一.建立数据库及数据表结构 CREATE SCHEMA IF NOT EXISTS `oauth2` DEFAULT CHARACTER SET utf8 ; USE `oauth2` ; -- -- ...

  6. 架构实战项目心得(十):基于spring-ladp的统一用户中心结构设计以及代码结构设计

    一.目录设计 1 公司 2 部门 3 注册人员 4 层级人员 二.规则 1 注册 自行注册人员放到模拟公司的目录下,等所属公司组织结构建立完毕,将此人员迁移到所属公司(或者删除此人员,所属公司新建此人 ...

  7. 架构实战项目心得(八):dubbo知识的整理

    1 Dubbo启动时检查.集群容错.负载均衡.线程模型的设置以及选项:    启动时检查:(1)Dubbo默认会在启动的时候检查依赖的服务是否可用,不可用时会抛出异常.阻止Spring初始化完成.以便 ...

  8. 架构实战项目心得(七):使用SpringBoot+Dubbo+Mybatisplus+Oracle搭建后台项目框架(二)

    接下来我们将整合mybatisplus+Oracle,实现一个简单的查询.(期间踩了很多坑,遇到一些问题,还好慢慢解决了.现在是通过配置文件的方式来进行dubbo服务的注册和发布,希望以后能在学习和实 ...

  9. 架构实战项目心得(六)(补):mongodb.conf参数详解

    --dbpath 数据库路径(数据文件)--logpath 日志文件路径--master 指定为主机器--slave 指定为从机器--source 指定主机器的IP地址--pologSize 指定日志 ...

随机推荐

  1. 浅谈Vue中的$set的使用

    在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去: 当我们去看vue文档的时候,会发现有这么一句话:如果在实例创建之后添加新 ...

  2. String hashCode 这个数字,很多人不知道!

    作者:coolblog segmentfault.com/a/1190000010799123 1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 ...

  3. 8、神经网络:表述(Neural Networks: Representation)

    8.1 非线性假设 我们之前学的,无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大. 下面是一个例子: 当我们使用x1, x2 的多次项式进行预测时,我们可以应用的很好 ...

  4. python Calendar 模块导入及用法

    Calendar 是python 日历模块,此模块的函数都是日历相关的,例如打印某月的字符月历,星期之类的模块,下面剖析python Calendar 模块导入及用法. 1,python导入日历模块 ...

  5. 搜索(DFS)---能到达的太平洋和大西洋的区域

    能到达的太平洋和大西洋的区域 417. Pacific Atlantic Water Flow (Medium) Given the following 5x5 matrix: Pacific ~ ~ ...

  6. Vue-cli2项目文件目录解析

    前言 不是原创,真的不是原创,主要我是根据CSDN的一篇文章和其他平台上的文章整理而来,在最后我会贴上所有原文的地址,下面正式进入正文. Vue-cli项目文件目录结构 这个是Vue-cli2.0版本 ...

  7. smarty之缓存机制

    当smarty开启缓存时,当tpl文件内容改变时,则缓存页面会重新生成 test.php: <?php date_default_timezone_set('asia/shanghai'); h ...

  8. Django 路由层与视图层

    1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...

  9. [web 安全] php随机数安全问题

    and() 和 mt_rand() 产生随机数srand() 和 mt_srand() 播种随机数种子(seed)使用: <?php srand(123);//播种随机数种子 for($i=0; ...

  10. python tkinter实时显示曲线

    from tkinter import *from tkinter import ttkimport time#画窗口root = Tk()root.geometry('1000x500')root. ...