基本概念

编程范式

结构化编程

限制了goto语句。对程序控制权的直接转移进行了限制和规范。

面向对象编程

限制了函数指针。对程序控制权的间接转移进行了限制和规范。

函数式编程

限制了赋值语句。对程序中的赋值进行了限制和规范。

软件框架

  1. 通常是为了实现某个业界标准或完成特定待定的基本任务的软件组件规范。例如,MVC(就是最常见的开发规范,还有MVP、MVVM、J2EE等

    MVC(Model-View-Presenter)即模型-视图-表现层的缩写。

    MVP:由MVC模式进化而来的,MVP改进了MVC中的控制器过于臃肿的问题。与MVC一样,MVP将应用程序的数据处理、数据显示和逻辑控制分开,用一种业务逻辑、数据显示和界面相分离的方法组织代码。MVVM:J2EE

  2. 为了实现某个组件规范,提供规范所要求的基础功能的软件产品。例如,Spring MVC 是MVC的开发框架。

软件架构

  1. 软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。

系统架构能力

基本理论

b

可用性设计

可靠性设计

一致性设计

协议设计

接入层架构设计

反向代理

DNS轮询

LVS

动静态分离

逻辑层架构设计

通讯机制

同步与异步

RPC

MQ

Cron

RMI

数据层架构设计

读写分离

主从同步

缓存优化

常见的架构设计方法论

  • 面向风险
    • 《恰如其分的软件架构》
  • 面向模式
    • 《面向模式的软件架构——模式系统》
  • 面向复杂度
  • DDD(Domain-Driven Design领域驱动设计)
    • 《中台架构与设计:基于 DDD 和微服务》、《领域驱动架构设计——软件核心复杂性应对之道》、《架构整洁之道》
    • DDD核心目的降低业务负责度,提升可扩展能力。兼顾架构设计和方案设计,不关注存储和计算,关注业务,是可扩展架构的设计技巧,不是完整的架构设计方法论。

软件架构的诞生:
核心原因:软件系统规模增长,算法和数据结构不再是主要问题,整个系统的组成成为首要问题。
业务的复杂度是固有的,没有办法完全消除,软件架构是为了降低软件系统的复杂度。

支付的系统发业务复杂度最高

架构设计原则

  • 合适原则:考虑资源、时间、业务
  • 简单原则:奥卡姆剃刀(若无目标,勿增实体)、平衡内部复杂度和外部复杂度
  • 演化原则:创造、迭代、重构重写

MangoDB没有事务,相对简单
MySQL比Oracle便宜
Nginx