0%

软件架构技术课堂笔记1

软件架构技术课堂笔记1

<会存在很多问题,日后的学习会进行更正>

什么是架构?

架构 是一系列相关的抽象模式,用于指导大型软件系统各方面的设计。是软件系统从整体到部分的最高层次的抽象划分(系统设计规划图)

根据关注的角度不同,架构大概有三种:(前几年比较流行:MVC)
逻辑架构 : 主要描述软件系统中元件之间的关系,例如用户界面,数据库,业务逻辑元件等等。
物理架构 : 软件元件是如何安装到硬件上的。
系统架构 : 系统的非功能性特征,如扩展性、可靠性、强壮性、灵活性、性能等。

架构一个软件系统,通常就会用到分层技术
现在比较流行的架构 MVVM(前后端分离)

分层技术的基本概念

1.软件开发主要任务,是要保证软件的高效运转和功能的正常实现。分层技术通过对软件内部结构进行解析,赋予不同层次结构的不同功能,从而提高软件功能的丰富程度和使用性能。

2.分层技术为软件的不同层次结构分配不同的解决过程,各个层次结构间组成一个严密的封闭系统。不同层面结构彼此平等。分层技术最主要的应用领域是软件架构开发。

3.分层技术是将软件按照一定逻辑关系分解成多个面,每个层面都有各自的功能,组合起来则形成完整的软件。各分层之间具有一定独立性,需要完善软件功能或者对软件进行升级改造时,只需要对涉及到的分层进行完善修改,对其它层面几乎没有影响,使软件升级和改造工作变得更加简单,提高工作效率。

4.分层技术通过分层模式来定义各个功能层次的接口。按照这种设计方式,
软件复用性得以大幅提高,对于软件开发、设计十分有利。开发之后的
各个层面能够充分利用标准接口,有效实现自动对接。

软件分层技术

分层技术是当前软件开发设计中使用频率十分高的一种设计方式,多层分布技术已成为今后软件开发设计的主要方向之一。

软件分层的目的就是为了架构一个好的系统,通过分层:
1.降低耦合,降低层与层之间的依赖。有利于应对需求变更,有利于排错,有利于后期的维护。

2.简化问题复杂度,各层分工明确。例如OSI七层模型和简化的tcpip协议的四层模型。把一个复杂问题分解,达到化繁为简的效果。但是,一般针对系统大小而言的,如果一个小的系统,也可能会把简单问题复杂化(如多人协调工作,要用到分层设计)。

软件分层技术作用特点:
1.有利于团队开发,分工合作。开发人员可以只关注整个结构中的其
中某一层,三层架构中,基本可以将工作分为界面设计人员、业务
实现人员、数据库设计人员。只要各层接口在开发前规定好,那么,
各层可以独立开发升级和维护。

2.有利于标准化。在开发过程中可以将每层的代码进行规范,固定开发语言的风格,可以忽略数据库的差异,设计完善的数据访问层可以将数据库的差异完全屏蔽,可以快速安全地实现数据库的切换等。

3.方便用新的实现来替换原有层次的实现,便于系统维护/升级。各层间通过接口解耦,接口与实现分离,从而可以非常方便的替换掉实现,或者升级实现等。

5.逻辑复用。例如原来基于B/S开发的程序现在要改成C/S,那么只要业务层的接口没有改变,那么业务层和数据层都可以直接复用。

6.方便部署。将各层开发成组件,则可以独立部署。分层可以把各层部署在不同的地方,实现分布式系统

MVC (模型-视图-控制器)

Model 负责存储系统的中心数据,将数据保存至一个模型中,方便使用。
View: 显示界面(html, jsp,asp,php…)。
Controller: 处理用户输入的信息,进行向模型发送数据。

Spring框架

Spring框架的作用
1.软件架构中利用Spring框架管理系统的各个组件(Action、Service、DAO),使用Spring的Ioc和AOP机制实现应用程序中的Bean组件等的关联,从而实现了低耦合调用,增强系统可维护性和扩展性。
2.Spring通过控制反转(IoC) 技术实现低耦合。

Spring概述

Spring用于管理组件,组件的管理需要进行配置
Spring为组件提供服务,服务的使用也需要配置
Spring是-个轻量级的框架,提供管理组件和提供服务的实现类。


Spring Frame 下载的集成框架包中:

  1. dist (开发者代码 当前版本可使用的)
    • jar包(类zip,解压内容)
    • javadoc.jar 文档说明
    • source 源码
  2. docs 开发文档
  3. schema XML文档约束

schema是新的XML文档约束;DTD出现的比较早. Schema要比DTD强大很多; Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。( XML Schemas Definition )(xmlns : XML namespace)

###Spring 常见核心jar包

core (核心工具类的jar包)
beans (访问配置文件,创建和管理bean的主要内容)
context (提供基础的Ioc功能上的扩展服务)
epression (Spring的表达式语言)
第三方依赖包,Apache 的commons.logging (日志处理的内部包)

移除某个包后变红反映的是

  1. 耦合:程序之间的依赖关系
    包括:
  • 类之间的依赖
  • 方法之间的依赖
  1. 解耦操作:
    降低程序间的依赖关系(编译期不依赖,运行时才依赖 )
    如何进行解耦:
  2. 解耦的思路:
  • 使用反射创建对象,避免使用new关键字
    (如案例中的 new com.mysql.jdbc.Driver)
  • 读取配置文件来获取创建对象的全限定类名(运行期,创建对象,工厂模式)

数据库的使用方式
1.注册驱动
2.获取连接
3.获取操控数据的预处理对象
4.执行sql返回执行结果
5.遍历结果集
6.关闭资源

Bean.xml

xml放在src目录下
xml的两种约束形式 限制随意标签的修改,不像html,可以修改写错。
用于作为配置文件。(dtd ,xsd )
Spring framework learn 文档说明 core
把创建对象交给spring来管理

Bean 属性:

  1. Id 创建对象唯一表示

  2. Class 类文件权限名称

  3. Scope:表示当前对象的作用范围

    • singleton:默认值,表示当前对象为单例对象
    • Prototype:表示当前对象为多例对象
    • request:Spring创建bean对象,将对象存储在request域中。
    • session:Spring创建bean对象,将对象存储在session域中。
    • global session: 分布式环境web项目,如果没有,则与session一样。
      1
      2
      3
      4
      5
      6
      //singleton
      默认:us1==us2 (则为单例模式)
      UserService usl = (UserService) ac. getBean( s: " userService" ) ;//强转
      UserService us2 = ac. getBean( s:" userService" , UserService. class)
      // 转化为UserService的字节码
      us1==us2 (则为单例模式) //true
  4. Init-method: 在指定类中初始化方法名称(如果有该方法,则自动进行)

  5. Destroy: 在指定类中销毁方法名称(释放容器时执行)
    主线程结束 spring容器还未关闭释放,则无法调用destroy方法

代码演示节选:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import org. spr ingframework. context. Appl icationContext;
import org. spr ingframework. context. support. ClassPathXmlApplicat ionContext ;
public class TestDemo2
public static void main(String[] args) {
UserService us = new UserService() ;
us. add() ;
//1.获取核心容器对象
ApplicationContext ac =
new ClassPathXmlApplicationContext ( configLocation:”bean.xml") ;
//bean目录字符串 接口实现类

//2.给句id获取Bean对象
//0bject obj = ac. getBean( "userService");
UserService us1 =(UserService) ac.getBean("userService");

System.out.printlnn(usl) ;//打印usl 看对象是否创立成功
Usl.add();//调用对象的方法

小结: spring 配置步骤:

  1. 导入相关的jar包并添加
  2. 在类的根目录下建立一个非中文的任意名称的xml、文件(bean.xml)
  3. 让spring管理资源,在配置文件中配置要创建的对象
  4. 测试
    1)ApplicationContext 对象 spring容器的顶级接口,超类,
    2)根据 id 获取对象

图

实现类:

  1. ClassPathXmlApplicationContext:可以加在类路径下的配置文件,要求配置
    文件必须在类路径下,如果不在,加载不了。(常用)
  2. FileSystemXmlApplicationContext:可以加在磁盘任意路径下配置文件(绝对
    路径–必须要求访问权限)
  3. AnnotationConfigApplicationContext:用于读取注解创建的容器

类的介绍:

BeanFactory: spring 容器的顶级接口
ApplicationContext :BeanFactory 的子接口

ApplicationContext 和 BeanFactory 区别:

创建对象的时间点不一样。
ApplicationContext ,只要读取配置文件,默认情况就会创建对象。
BeanFactory 什么时候用到该对象则才创建对象。

Bean注入方法:

  1. 方法:Spring 容器调用无参构造方法注入,创立对象。

userService us1 =(UserService) ac.getBean("userService"); //类名

bean属性:
name:指定参数在构造方法中的名称
index:指定参数列表中的索引位置
type:指定参数列表中的参数类型 (多个相同会出问题)
value:赋值,基本类型或String类
ref: 可以赋值其他bean类型的对象

使用构造方法的注入过程

若想要调用有参数的构造方法。则:
使用构造方法的注入过程方式
要求:需要提供一个对应参数列表的构造函数
标签: constructor-arg

1
2
3
4
5
6
<bean id=”userService ” class=”com.test.UserService”>
<constructor-arg name=”name” value=”张三”></constructor-arg>
<!-- (参数名 参数值) -->
或者:<constructor-arg index=”0” value=”李四”></constructor-arg> (
<!-- (索引位置 参数值) -->
</bean>

== 比较地址的值
equals 实际的值

比较对象 需重写equals方法

-------------感谢您的阅读(Thanks for your reading)-------------

欢迎关注我的其它发布渠道