1、软件体系结构基础

(1)架构风格 vs 架构模式 vs 设计模式 vs 框架

名称 重用 定位 描述 案例
架构/体系结构风格 设计重用 最高级抽象层次的设计 架构风格和建筑风格类似,架构风格以非常宽泛的笔触告诉我们如何组织代码。它指定应用程序的层、高级模块,以及这些模块和层之间如何交互,以及它们之间的关系。 基于组件,整体应用,分层的,管道和过滤器,事件驱动,发布订阅,插件,客户端服务器,服务导向
架构/体系结构模式(Architecture) 设计重用 实现架构风格的方式,战略,架构关注的是结构 体系结构模式对代码库有着广泛的影响,最常见的影响是水平地(即如何在层内构造代码)或垂直地(即如何将请求从外层处理到内层和内层) 三层,微内核,MVC模型-视图-控制器,MVVM模型-视图-视图模型
设计模式 设计重用?代码吧? 解决局部问题的方法,战术 解决具体问题,提高代码复用、降低耦合 中介者模式、工厂模式、代理模式……
框架(Framework) 设计、代码、分析重用 框架关注的是规范,或其产品 通常指的是为了实现某个业界标准或者完成特定基本任务的软件组件规范,也指为了实现某某个软件组件规范时,提供规范做要求之基础功能的软件产品 开发规范:MVC、MVP、MVVM、J2EE等框架。
产品:Spring MVC(MVC规范),SSH,Spring JPA

模式:是对反复出现的问题的反复解决方案。架构模式、设计模式,都是模式,都是为了解决方案复用。

(2)三层架构 VS MVC

三层架构(3-tier architecture)

UI表现层(Web层),BLL业务逻辑层,DAL数据访问层(持久化层)
VO|BO|PO

https://cloud.tencent.com/developer/article/1454768

MVC

实际上是对三层架构中的UI层再次拆分。

MVVM:

http://zditect.com/main/xamarin/xamarin-model-view-viewmodel-pattern.html

参考:
https://cloud.tencent.com/developer/article/1627409【特别好】
https://zhuanlan.zhihu.com/p/339896310【一般】
https://cloud.tencent.com/developer/article/1454768【有误导性】

(3)Spring vs SpringMVC vs SpringBoot

https://cloud.tencent.com/developer/article/1665045

___待整理:
MVC:Model(模型)、VIew(视图)、Controller(控制器);我们从开始接触并学习javaWeb开发就知道MVC这一种架构,如早起的Sturts1、Sturts2等。

Spring:容器,可以接管web层、service层,dao层,持久层的组件,可以配置各种bean,维护bean间关系。分层的轻量级开源框架。
核心是控制反转(IOC)和面向切面(AOP),IOC又叫依赖注入。

SpringMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校验等。SpringMVC是一个MVC的开源框架,SpringMVC=struts2+spring,springMVC就相当于是Struts2加上Spring的整合。

2、Web开发架构

架构风格:B/S,客户端服务器?
架构模式:三层,MVC
框架:三层每层都需要框架,或者相关技术。

区分概念:
持久层Persistence

  • 持久层只是一个逻辑概念而已,主要任务是负责把数据保存起来,一般是指保存至数据库或者文件,也可以负责完成与之相关的行为。
  • 持久层指的是把数据长期保存起来,如数据库把数据长期保存在硬盘里,XML也可以长期保存数据,还有如果把数据存放到指定文件中,也可以成为持久层。
  • 持久化可以理解为动词。Java中的Hibernate做的就是持久化的操作,主要是对数据库底层的OR映射,这样我们就不必关心讨厌的关系映射了,直接操作对象就可以了。

ORM,object-relational mapping,对象关系映射,
ORM也是一种对数据库访问的封装,然而ORM不像DAO只是一种软件设计的指导原则,强调的是系统应该层次分明,更像是一种工具,有着成熟的产品,比如JAVA界非常有名的Hibernate,以及很多PHP框架里自带的ORM库。他们的好处在于能将你程序中的数据对象自动地转化为关系型数据库中对应的表和列,数据对象间的引用也可以通过这个工具转化为表之间的JOIN。使用ORM的好处就是使得你的开发几乎不用接触到SQL语句。创建一张表,声明一个对应的类,然后你就只用和这个类的实例进行交互了,至于这个对象里的数据该怎么存储又该怎么获取,通通不用关心。

DAL,Data Access Layer,数据访问层,是一个概念或者说是一个方案,由许多DAO具体实现。
DAO,Data Access Object,数据访问对象,是夹在业务逻辑与数据库资源中间。是DAL的具体实现(DAO是框架层面)。

  • 把和数据库相关的代码封装起来,这样当我们执行分库时,便只用调整DAO的代码了,模型根本不用关心它使用的数据是放在A库还是B库。
  • DAO是一个软件设计的指导原则,在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。
层次 作用 Java Go
Orm层 数据库与实体映射 Hibernate(JPA)/Maven Gorm
Service层 业务逻辑 Spring? Gin
Controller/Router/Action层 转发

参考:
https://blog.csdn.net/suiye/article/details/7824943

1、Gorm

官方教程:https://gorm.io/zh_CN/docs/
https://learnku.com/docs/gorm/v2/index/9728

2、Zap
zap是Uber开源的日志库;

3、Viper
viper 是一个配置解决方案,拥有丰富的特性:

  • 支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件;
  • 可以设置监听配置文件的修改,修改时自动加载新的配置;
  • 从环境变量、命令行选项和io.Reader中读取配置;
  • 从远程配置系统中读取和监听修改,如 etcd/Consul;
  • 代码逻辑中显示设置键值。
posted on 2021-12-24 15:54  西伯尔  阅读(653)  评论(0编辑  收藏  举报