PHP开发知识结构
  • README
  • Architecture
    • 架构基础
      • 参考资料
      • [分布式架构 Broker](Architecture/架构基础/分布式架构 Broker.md)
      • 高可用
      • 高性能
      • 架构设计原则
      • 架构原则
      • 可扩展
      • 模块化
      • 业务架构
    • 建模
      • PERM
    • 网关
      • 微服务与API网关
    • DDD
      • 1.基础
      • 参考资料
    • JOB
      • 设计
    • MQ
      • Kafka
        • 常见问题
        • 架构
        • kafka介绍
      • Notes
        • RabbitMQ和Kafka的比较
      • Rabbit Mq
        • Notes
          • 常见问题
          • 存储机制
          • 错误问题处理
          • 消息持久化
          • 消息确认机制
        • [1. RabbitMq的基础](Architecture/MQ/RabbitMq/1. RabbitMq的基础.md)
        • [2. RabbitMq的概念](Architecture/MQ/RabbitMq/2. RabbitMq的概念.md)
        • [x1. RabbitMQ与Redis队列对比](Architecture/MQ/RabbitMq/x1. RabbitMQ与Redis队列对比.md)
      • 消息队列
  • Base
    • 架构
      • 1.如何保证缓存与数据双写一致性
    • 文件系统
      • 文件系统原理
    • 性能
      • 1.缓存
    • 异步编程
      • 基于任务的异步编程
    • Networks
      • 常见问题
        • 跨域
        • 三次握手和四次分手
        • RPC和REST
        • RPC框架
      • 进程和线程
        • 多线程和多线程
        • 进程、线程、协程
        • 进程间通信方式有哪些
        • 进程切换
        • [通道 Chan](Base/Networks/进程和线程/通道 Chan.md)
        • 同步异步、阻塞非阻塞
        • 协程
      • 执行体
        • 协同
      • HTTP
        • [1. 互联网协议入门](Base/Networks/HTTP/1. 互联网协议入门.md)
        • [2. HTTP协议入门](Base/Networks/HTTP/2. HTTP协议入门.md)
        • [3. HTTP报文内的HTTP信息](Base/Networks/HTTP/3. HTTP报文内的HTTP信息.md)
        • [4. HTTP状态码](Base/Networks/HTTP/4. HTTP状态码.md)
        • [6. HTTPS](Base/Networks/HTTP/6. HTTPS.md)
        • [7. 用户身份的认证](Base/Networks/HTTP/7. 用户身份的认证.md)
        • Untitled
      • IO编程
        • IO
        • IO定义
        • IO模型
      • Notes
        • 多进程共用数据库连接问题
    • OOAD
      • 面向对象
        • 抽象类和接口
        • 对象
        • 多态
        • 封装
        • 克隆
        • 控制反转
        • 类的变量
        • 依赖注入
        • MVC
        • ORM
  • Business
    • 权限
      • Casbin
    • 注册登录
      • 单点登录
    • 1.服务端接口版本问题
    • 2.一致性问题
    • [3.if else 太多](Business/3.if else 太多.md)
    • 4.如何做监控统计
    • 5.规则引擎
    • 6.滑块验证码
    • 7.大规模上报一致性问题
    • 8.状态机
  • Cloud
    • 云存储
    • Docker
      • 常见问题
        • [Certificate Signed By Unknown Authority](Cloud/Docker/常见问题/certificate signed by unknown authority.
        • [No Route To Host](Cloud/Docker/常见问题/no route to host.md)
      • [0. 简介](Cloud/Docker/0. 简介.md)
      • [1. 安装](Cloud/Docker/1. 安装.md)
      • [2. 基本概念](Cloud/Docker/2. 基本概念.md)
      • [3. 镜像操作](Cloud/Docker/3. 镜像操作.md)
      • [4. 容器操作](Cloud/Docker/4. 容器操作.md)
      • [5. 仓库操作](Cloud/Docker/5. 仓库操作.md)
      • [6. 数据卷](Cloud/Docker/6. 数据卷.md)
      • [7. 资源列表](Cloud/Docker/7. 资源列表.md)
      • [8. 应用](Cloud/Docker/8. 应用.md)
    • Kubernetes
      • 安装
      • 基础知识
      • 说明
    • Micro Services
      • [1. 服务框架](Cloud/MicroServices/1. 服务框架.md)
      • [3. 服务安全](Cloud/MicroServices/3. 服务安全.md)
      • [4. 后台服务](Cloud/MicroServices/4. 后台服务.md)
      • [5. 服务容错](Cloud/MicroServices/5. 服务容错.md)
      • [6. 服务监控](Cloud/MicroServices/6. 服务监控.md)
      • [7. 服务部署平台](Cloud/MicroServices/7. 服务部署平台.md)
      • [8. 服务化](Cloud/MicroServices/8. 服务化.md)
      • 参考资料
      • HTTP
      • RPC
      • [x1. API网关](Cloud/MicroServices/x1. API网关.md)
      • [x2. 服务发现](Cloud/MicroServices/x2. 服务发现.md)
      • [x3 监控](Cloud/MicroServices/x3 监控.md)
  • Concept
    • Etcd
    • Swoole
  • Data
    • Algorithm
      • 排序
        • 插入排序
        • 快速排序
        • 冒泡排序
        • 选择排序
        • 直接插入排序
      • 参考资料
      • 哈希算法
      • 一致性hash
    • Data Structure
      • 数据结构
        • [1. 什么是数据结构](Data/DataStructure/数据结构/1. 什么是数据结构.md)
        • [2. 线性表](Data/DataStructure/数据结构/2. 线性表.md)
        • [3. 链表](Data/DataStructure/数据结构/3. 链表.md)
        • [4. 数组](Data/DataStructure/数据结构/4. 数组.md)
        • [5. 栈](Data/DataStructure/数据结构/5. 栈.md)
        • [6. 队列](Data/DataStructure/数据结构/6. 队列.md)
        • [7. 哈希表](Data/DataStructure/数据结构/7. 哈希表.md)
        • [8. 堆](Data/DataStructure/数据结构/8. 堆.md)
        • [9. 二叉查找树](Data/DataStructure/数据结构/9. 二叉查找树.md)
      • Notes
        • Hash表的时间复杂度为什么是O(1)
      • [1 简介](Data/DataStructure/1 简介.md)
      • [2 时间复杂度](Data/DataStructure/2 时间复杂度.md)
  • Data Base
    • Cache
      • 如何保证缓存与数据库的双写一致性
      • Memcached和Redis对比
    • ES
      • 倒排索引
      • 概念
      • 入门
    • Memcached
      • Memcached介绍
      • Memcached使用
    • Mongo DB
      • 安装
      • MongoDB查询
      • MongoDB连接
      • MongoDB入门
    • My Cat
      • 原理
      • Mycat中的概念
    • My SQL
      • 基础篇
        • [1. Mysql](DataBase/MySQL/基础篇/1. Mysql.md)
        • [2. 数据库操作](DataBase/MySQL/基础篇/2. 数据库操作.md)
        • [3. 数据类型](DataBase/MySQL/基础篇/3. 数据类型.md)
        • [4. 数据库设计](DataBase/MySQL/基础篇/4. 数据库设计.md)
        • [5. 索引](DataBase/MySQL/基础篇/5. 索引.md)
        • [6. 事务](DataBase/MySQL/基础篇/6. 事务.md)
        • 编码
        • 范式
        • 一条SQL查询语句是如何执行的?
      • 实践篇
        • [1. 事务回滚](DataBase/MySQL/实践篇/1. 事务回滚.md)
        • [2. 隐式转换](DataBase/MySQL/实践篇/2. 隐式转换.md)
        • [3. 分库分表](DataBase/MySQL/实践篇/3. 分库分表.md)
      • 事务和锁
        • 表锁&行锁
        • 乐观锁&悲观锁
        • 事务
        • 数据库锁
        • mysql死锁的条件及应对措施
      • 性能优化
        • [0. 性能优化](DataBase/MySQL/性能优化/0. 性能优化.md)
        • [1. 执行优化](DataBase/MySQL/性能优化/1. 执行优化.md)
        • [2. 架构优化](DataBase/MySQL/性能优化/2. 架构优化.md)
      • Note
        • 如何进行分库分表
        • 如何选择主库和从库
        • 如何做数据恢复
        • 删除和添加索引,为什么要先加后删
        • 什么是关系表
        • 数据库单表由万级变成亿级,怎么处理
        • 索引失效的场景
        • 一条SQL查询语句是如何执行的
        • count查询为什么会慢
        • [MySQL 意外宕机,如何数据恢复](DataBase/MySQL/Note/MySQL 意外宕机,如何数据恢复.md)
        • Mysql安装
        • mysql查询语句怎么做性能分析?
        • mysql批量删除表名符合条件的表
        • MySQL数据库规范
        • Pt Online Schema Change
        • SQL慢查优化方案
        • [Warning PDO Statementexecute SQLSTATE HY 093 Invalid Parameter Number Number Of Bound Variables Doe
      • [x1. 常见问题](DataBase/MySQL/x1. 常见问题.md)
      • [x2 参考资料](DataBase/MySQL/x2 参考资料.md)
      • [x3 资料推荐](DataBase/MySQL/x3 资料推荐.md)
    • Redis
      • 多线程
        • KeyDB实现
        • [Redis 多线程](DataBase/Redis/多线程/Redis 多线程.md)
      • 分布式
        • 集群
        • 清理集群
        • 哨兵机制
        • 主从复制
        • Redis分布式锁
      • 基础知识
        • [1. 简介](DataBase/Redis/基础知识/1. 简介.md)
        • [2. 数据结构](DataBase/Redis/基础知识/2. 数据结构.md)
        • 配置说明
        • 问题画像
        • 知识图
      • 进阶
        • 管道
        • 消息队列
        • 性能调优
        • 性能分析
        • 优化建议
        • redis升级
      • 使用场景
        • 数据类型适用场景
        • Redis的问题
      • 数据结构
        • 底层的数据结构
        • 复杂度
        • 键值
        • 内存分配
      • Notes
        • 缓存特征、介质
        • 如果有大量的key需要设置同一时间过期,一般需要注意什么?
        • 如何查找key
        • 如何应对缓存穿透和缓存雪崩问题?
        • 如何找到最大值对应的key
        • 为什么要使用Nosql
        • [为什么Redis 是单线程却能支撑高并发](DataBase/Redis/Notes/为什么Redis 是单线程却能支撑高并发.md)
        • 应用场景
        • [Redis 字典遍历](DataBase/Redis/Notes/Redis 字典遍历.md)
        • [Redis Cluster请求路由原理](DataBase/Redis/Notes/Redis Cluster请求路由原理.md)
        • Redis的监控
        • Redis的同步机制
        • redis的hash怎么实现的?
        • redis过期策略和缓存置换策略
        • [Redis缓存数据类型的选择 ](DataBase/Redis/Notes/Redis缓存数据类型的选择 .md)
        • Redis集群之间是如何复制?
        • Redis迁移
        • Redis如何做持久化的
        • Redis写入大量数据后,为什么变慢了
        • redis有哪些危险的命令?怎么避免
      • 参考资料
  • Distributed
    • Zookeeper
      • 常见问题
    • 多线程环境解决方案
    • 分布式链路追踪
    • 分布式事务
    • 分布式系统原理以及常用解决方案
    • 分布式最终一致性
    • 数据一致性
    • 一致性哈希
    • CAP定理
    • Map Reduce
    • Untitled
  • Front End
    • [01 前端工具](FrontEnd/01 前端工具/README.md)
      • [Apidoc](FrontEnd/01 前端工具/Apidoc.md)
      • [Sublime](FrontEnd/01 前端工具/Sublime.md)
      • [Webpack](FrontEnd/01 前端工具/Webpack.md)
      • [Web Storm](FrontEnd/01 前端工具/WebStorm.md)
    • 04 Java Script
      • [javascript上传图片检测宽度高度文件大小](FrontEnd/04 JavaScript/javascript上传图片检测宽度高度文件大小.md)
      • [js中iframe的使用](FrontEnd/04 JavaScript/js中iframe的使用.md)
    • 10 Vue
      • [开源项目库汇总](FrontEnd/10 Vue/开源项目库汇总.md)
      • [学习步骤](FrontEnd/10 Vue/学习步骤.md)
      • [Awesome](FrontEnd/10 Vue/awesome.md)
      • [My Vue](FrontEnd/10 Vue/MyVue.md)
      • [Vue](FrontEnd/10 Vue/Vue.md)
      • [Vuejs入门](FrontEnd/10 Vue/Vuejs入门.md)
    • x1 资源
      • [博客推荐](FrontEnd/x1 资源/博客推荐.md)
    • x2 常见问题
      • [Cross Domain](FrontEnd/x2 常见问题/Cross-domain.md)
  • Notes
    • 1.Shell
      • 常用命令
      • 替换功能
      • Gocron处理Docker进程的问题
      • Shell中date命令用法
      • shell字符串
    • 编码
      • 参考资料
      • 代码调试
      • 代码规范
      • 代码简洁之道
      • 代码质量
      • 代码走查
    • 监控
      • Prometheus
    • 开发
      • 脚本常见问题
    • 开发流程
      • 持续集成
    • 其他
      • Gitbook自动生成SUMMARY
    • API
      • API加密方案
      • api设计
    • Git
      • 常见问题
      • 代码回滚
      • 多版本工作流
      • 工作流
      • 快速入门Git
      • 三路合并
      • [git blame出现的人员不一致](Notes/Git/git blame出现的人员不一致.md)
      • Git撤销merge合并
      • Git忽略.gitignore
      • Git远程分支
    • HTTP
      • 499问题处理
      • HTTP状态码
    • Linux
      • 安装扩展
      • 回收站
      • 解析配置
      • 命令
      • 文件权限问题
      • [Apache 和 nginx](Notes/Linux/Apache 和 nginx.md)
      • [Linux 防止rm误删文件,将rm配置成mv到.trash ](Notes/Linux/Linux 防止rm误删文件,将rm配置成mv到.trash .md)
      • [Linux 中 Crontab 定时任务执行时的环境变量问题](Notes/Linux/Linux 中 Crontab 定时任务执行时的环境变量问题.md)
      • [Linux下执行shell脚本,提示No such file or directory](Notes/Linux/Linux下执行shell脚本,提示No such file or director
      • linux压缩和解压缩命令大全
      • Untitled
      • Vim批量替换
    • Nginx
      • ERR_CONTENT_LENGTH_MISMATCH解决方法
      • [Nginx 和 Apache 各有什么优缺点?](Notes/Nginx/Nginx 和 Apache 各有什么优缺点?.md)
      • windows下安装LNMP
  • Ops
    • 软件和架构标准化
  • PHP
    • 0.原理
      • php的四种运行模式
    • 1.语言参考
      • 命名空间
      • 事件系统
      • 数组
      • 注解
      • Collection
    • 2.编码
      • 代码分析
      • 事务和锁代码优化
      • Sonar Qube
      • Validate
    • 3.框架
      • 基础
        • Swoole高效跟传统的web开发区别
      • Codeigniter
        • 安全性
        • 钩子
        • 缓存机制
        • 路由
        • 配置管理
        • Common
        • MVC
        • ORM的接口
      • Laravel
        • 介绍
        • 最佳实践
      • Laravel Admin
        • 介绍
      • Lumen
        • 脚本
        • 入门
      • Slim
        • 如何编写Cron脚本
      • Swoft
        • 数据库操作
          • Dao
          • [x0 学习资料](PHP/3.框架/Swoft/数据库操作/x0 学习资料.md)
        • [0. 安装](PHP/3.框架/Swoft/0. 安装.md)
        • [1. 目录结构](PHP/3.框架/Swoft/1. 目录结构.md)
        • [2. 生命周期](PHP/3.框架/Swoft/2. 生命周期.md)
        • [3. HTTP服务](PHP/3.框架/Swoft/3. HTTP服务.md)
        • [4. 缓存](PHP/3.框架/Swoft/4. 缓存.md)
        • [6. 视图](PHP/3.框架/Swoft/6. 视图.md)
        • 注解
        • Task
        • [x1. 问题](PHP/3.框架/Swoft/x1. 问题.md)
      • Swoole
        • swoole协程
      • Tars
        • 安装后台
    • 4.进阶
      • 加密
        • AES
      • 进程
        • 管道
        • 进程间通信
      • 扩展
        • 如何编写一个PHP的C扩展
      • 内核
        • 参考资料
        • 看源码原则
      • Composer
        • 参数
        • 钩子
        • 类加载优化
        • PSR
    • 5.性能
      • 调用链
        • 跟踪系统
      • 性能分析
        • 非侵入式监控平台
        • 接口性能分析实践
        • Xhprof
      • Notes
        • [Opcache 和 APCu的关系](PHP/5.性能/Notes/Opcache 和 APCu的关系.md)
      • 并发和异步
      • APCU
      • Xdebug
    • 6.常见问题
      • 常见问题
      • 常用函数
      • 反射类
      • 浮点数的精度
      • 环境搭建常见问题
      • [获取当前客户端的 IP 地址](PHP/6.常见问题/获取当前客户端的 IP 地址.md)
      • 垃圾回收机制
      • 敏感词过滤
      • 魔术方法
      • 内网和外网
      • 生成器
      • 事务处理
      • 无法常驻内存
      • 析构函数
      • 字符串加密解密
      • AOP
      • Curl
      • GET与POST的区别
      • include和require的区别
      • IP地址函数ip2long
      • Iterator
      • JSON
      • JSON解密的问题
      • [Nginx 设置 PHP_VALUE 的灵异问题](PHP/6.常见问题/Nginx 设置 PHP_VALUE 的灵异问题.md)
      • Nginx和PHP-fpm的关系
      • [php 后端实现JWT认证方法](PHP/6.常见问题/php 后端实现JWT认证方法.md)
      • [PHP Jit](PHP/6.常见问题/PHP jit.md)
      • PHP程序如何debug
      • PHP升级可能导致的坑
      • php数组
      • PHP注解的实现
      • [Session 和 Cookie](PHP/6.常见问题/Session 和 Cookie.md)
      • xdebug的使用
    • 7.不足
      • 无法常驻内存
    • 8.面试题
      • 参考资料
      • 面试题
  • Resource
    • Github
      • Github项目推荐
    • Interview
      • 腾讯面试
    • Tools
      • Git
        • 代码回滚
        • 多版本工作流
        • 工作流
        • Git忽略.gitignore
        • Source Tree
      • 流程图
      • 思维导图
      • Markdown
      • Other
      • Postman
      • Sublime
    • Website
  • Team
    • 研发效能
      • 持续开发
      • 定义
      • 度量
    • 工作总结
    • 研发体系
  • Web
    • 多环境测试方案
    • 应用框架
    • Web测试
    • Web基础开发
Powered by GitBook
On this page
  • 基本原则
  • 功能选择
  • 服务端设计和并发
  • 分布式系统
  • 用户体验
  • 艰难的问题
  1. Architecture
  2. 架构基础

架构设计原则

基本原则

原则1:KISS(Keep it simple,sutpid) 和保持每件事情都尽可能的简单。用最简单的解决方案来解决问题。

原则2:YAGNI(You aren’t gonna need it)-不要去搞一些不需要的东西,需要的时候再搞吧。

(小编点评:speculative development的例子可谓俯拾皆是。程序员们对自己说:“我肯定以后会需要这项额外的功能,所以现在就提前把它实现了吧”。其实这是最考验功力的地方,不能闭门YY需要的功能,架构上又要洞察趋势。)

原则3:爬,走,跑。换句话说就是先保证跑通,然后再优化变得更好,然后继续优化让其变得伟大。迭代着去做事情,敏捷开发的思路。对于每个功能点,创建里程碑(最大两周),然后去迭代。

(小编点评:快速反馈,一个“拍脑袋的里程碑”也好过没有里程碑...)

原则4:创建稳定、高质量的产品的唯一方法就是自动化测试。所有的都可以自动化,当你设计时,不妨想想这一点。

(小编点评:一切自动化也要考虑ROI,比如对于特别易变的页面层...)

原则5:时刻要想投入产出比(ROI)。就是划得来不。

原则6:了解你的用户,然后基于此来平衡你需要做哪些事情。不要花了几个月时间做了一个devops用户界面,最后你发现那些人只喜欢命令行。此原则是原则5的一个具体表现。

原则7:设计和测试一个功能得尽可能的独立。当你做设计时,应该想想这一条。从长远来看这能给你解决很多问题,否则你的功能只能等待系统其他所有的功能都就绪了才能测试,这显然很不好。有了这个原则, 你的版本将会更加的顺畅。

原则8:不要搞花哨的。我们都喜欢高端炫酷的设计。最后我们搞了很多功能和解决方案到我们的架构中,然后这些东西根本不会被用到。

(小编点评:老板喜欢ppt?)

功能选择

原则9:不可能预测到用户将会如何使用我们的产品。所以要拥抱MVP(Minimal Viable Product),最小可运行版本。这个观点主要思想就是你挑几个很少的使用场景,然后把它搞出来,然后发布上线让用户使用,然后基于体验和用户反馈再决定下一步要做什么。

原则10:尽可能的做较少的功能。当有疑问的时候,就不要去做,甚至干掉。很多功能从来不会被使用。最多留个扩展点就够了。

(小编点评:产品经理可能是听不进去的,最好采取数据度量说话...)

原则11:等到有人提出再说(除非是影响核心流程,否则就等到需要的时候再去做)。

原则12:有时候你要有勇气和客户说不。这时候你需要找到一个更好的解决方案来去解决。记住亨利福特曾经说过的 :”如果我问人们他们需要什么,他们会说我需要一匹速度更快的马”。记住:你是那个专家,你要去引导和领导。要去做正确的事情,而不是流行的事情。最终用户会感谢你为他们提供了汽车。

服务端设计和并发

原则13:要知道一个server是如何运行的,从硬件到操作系统,直到编程语言。优化IO调用的数量是你通往最好架构的首选之路。

原则14:要了解Amdhal同步定律。在线程之间共享可变数据会让你的程序变慢。只在必要的时候才去使用并发的数据结构,只在必须使用同步(synchronization)的时候才去使用同步。如果要用锁,也要确保尽可能少的时间去hold住锁。如果要在加锁后做一些事情,要确保自己在锁内会做哪些事情。

原则15:如果你的设计是一个无阻塞且事件驱动的架构,那么千万不要阻塞线程或者在这些线程中做一些IO操作,如果你做了,你的系统会慢的像骡子一样。

分布式系统

原则16:无状态的系统的是可扩展的和直接的。任何时候都要考虑这一点,不要搞个不可扩展的,有状态的东东出来,这是起码的。

原则17:保证消息只被传递一次,不管失败,这很难,除非你要在客户端和服务端都做控制。试着让你的系统更轻便(使用原则18)。你要知道大部分的承诺exactly-once-delivery的系统都是做了精简的。

原则18:实现一个操作尽可能的幂等。这样的话就比较好恢复,而且你还处于至少一次传递(at least once delivery)的状态。

原则19:知道CAP理论。可扩展的事务(分布式事务)是很难的。如果可能的的话,尽可能的使用补偿机制。RDBMS事务是无法扩展的。

(小编点评:new SQL了解一下。。。)

原则20:分布式一致性无法扩展,也无法进行组通信,也无法进行集群范围内的可靠通信。理想情况下最大的节点限制为8个节点。

原则21:在分布式系统中,你永远无法避免延迟和失败。

(小编点评:嗯,对,面向fail 设计。但是你的考虑你的用户,你的服务提供SLA。是真的需要724365吗?)

用户体验

原则22:要了解你的用户和清楚他们的目标。他们是新手、专家还是偶然的用户?他们了解计算机科学的程度。极客喜欢扩展点,开发者喜欢示例和脚本,而普通人则喜欢UI。

原则23:最好的产品是不需要产品手册的。

原则24:当你无法在两个选择中做决定的时候,请不要直接把这个问题通过提供配置选项的方式传递给用户。这样只能让用户更加的发懵。如果连你这个专家都无法选择的情况下,交给一个比你了解的还少的人这样合适吗?最好的做法的是每次都找到一个可行的选项;次好的做法是自动的给出选项,第三好的做法是增加一个配置参数,然后设置一个合理的默认值。

原则25:总是要为配置设置一个合理的默认值。

原则26:设计不良的配置会造成一些困扰。应该总是为配置提供一些示例值。

原则27:配置值必须是用户能够理解和直接填写的。比如:不能让用户填写最大缓存条目的数量,而是应该让用户填写可被用于缓存的最大内存。

原则28:如果输入了未知的配置要抛出错误。永远不要悄悄的忽略。悄悄的忽略配置错误往往是找bug花了数小时的罪魁祸首。

艰难的问题

原则29:梦想着新的编程语言就会变得简单和明了,但往往要想真正掌握会很难。不要轻易的去换编程语言。

(小编点评:“技术极客”是听不进去的,不如把“个人修炼”和“项目采用”分开看待...)

原则30:复杂的拖拉拽的界面是艰难的,不要去尝试这样的效果,除非你准备好了10人年的团队。

(小编点评:我一直不太相信整体性的代码生成,比如MDA,或者拖拉拽建模代替写代码...如果说有成功的,或者是在比较狭小的领域)

Previous高性能Next架构原则

Last updated 3 years ago