暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第4篇:设计系统的逻辑架构、开发架构和物理架构

编程实践楼 2021-09-24
4197

很多学编程的同学都有类似的感觉:编程代码一看都明白,但让你独自开放软件项目或以团队方式开发软件项目时,却无从下手,代码也不知道怎么写。产生这种情况的主要原因是缺乏实战项目开发经验,没有真正自己主导开发过软件项目。


电子图书在线阅读系统就是一个以自己为主导的实战项目,项目涵盖Java WEB前端和后端、移动APP开发、第三方支付、接口等技术。


系统的架构设计是在业务需求已经清晰的前提下进行的,假定在系统需求分析阶段已经确定了系统的功能和业务范围,也明确了系统运营需求。在上述需求还没有确定的情况下,不适宜开展系统的架构设计,需要回到需求分析阶段完善上述需求后再开展系统的架构设计。

系统架构就是一些模型图,模型图是人们用来理解系统和沟通的工具。这些模型图需要提供给系统相关干系人来理解系统,系统相关干系人有项目经理、产品经理、开发人员、系统运营维护人员、客户、项目投资人等。这些干系人有不同的知识背景,对同一架构模型图也会有不同的认知和理解:如果把开发架构模型图给产品经理或客户看,他们定然看不懂也不能理解;同样的道理,如果只把逻辑架构图给开发人员看,就不能正确地指导开发人员构建开发环境。

因此在进行系统架构设计时,需要从系统的不同维度进行设计,以满足系统相关干系人理解系统架构的需求。架构设计模型主要有逻辑架构、开发架构、数据架构、物理架构和运行架构五种模型图。一般来说需要设计的系统架构模型有逻辑架构、开发架构和物理架构三种架构模型图。数据架构模型一般放在数据库中进行设计,运行架构和物理架构基本相近,只是在物理架构中加了数据的流向,因此一些系统设计使用物理架构代替了运行架构。

系统逻辑架构

图 3-1 系统逻辑架构

图3-1为系统逻辑架构,系统从逻辑上划分为客户端、服务端、数据库三部分。客户端由安卓APP和JSP页面构成,客户端发送请求到服务端,服务端处理请求并回送数据到客户端,客户端也可以直接调用服务端接口获取数据;服务端由控制器类(或接口类)、业务类和实体类构成,完成系统业务处理,响应客户端请求和接口调用;数据库为服务端提供数据存取服务。

系统开发架构

系统开发架构采用Spring MVC框架,MVC是Model(模型,也称为数据模型)、View(视图)、Controll(控制器)三个英文单词首字母的缩写。从MVC组合的三个单词也可以看出,MVC是一种设计模型,它使用控制器将数据模型和视图进行分离,也就是将视图和数据解耦。这样的好处是后端处理的数据模型和前端视图显示的数据格式无关,实现一个数据模型可以对应多个视图以不同的方式来展现数据,当数据模型或视图发生变化时,相互之间的影响也会降低到最低。如图3-1所示。

图 3-2 MVC视图、模型、控制器交互图

MVC中最重要的核心就是控制器,控制器与视图和模型相对独立,它起到一个负责分发请求和返回处理结果的作用,对请求和数据模型的处理一般由JavaBean负责。



图 3-3 系统开发架构

图3-3为系统开发架构,图3-1分为两部分:虚线框外的是WEB程序的浏览器部分,实际还应包括APP客户端,用户通过浏览器和APP客户端与系统进行交互,同时浏览器也负责解析JSP页面;虚线框内的是WEB程序的后台部分,这部分包括控制器(Controller类)、业务逻辑(Service类)、数据模型(实体类)、数据持久层(Mybatis框架)和MySQL数据库管理系统。

JSP页面就是视图,用户通过JSP页面发出请求后,Spring MVC会根据请求路径,将请求发给与请求路径对应的Controller类,Controller类调用Service类对请求进行处理,Service类会调用数据持久层MyBatis完成对实体类的存取和查询工作,并将处理结果返回到Controller类,Controller类将处理结果转换为ModelAndView对象,JSP接收ModelAndView对象并进行渲染。

Controller类是在普通Java类的头部加入@Controller注解,使其变为Controller类,在Controller类中使用@RequestMapping注解标记在Controller类方法的头部,使该方法可以响应一个WEB请求地址,当JSP页面向这个地址发送请求时,该方法会被调用。

下面的代码是Controller类的样例。

@Controller

@RequestMapping(value = "Admin")

public class UserController {

@RequestMapping(value="/login.do",method={RequestMethod.GET})

@ResponseBody

Public ModelAndView loginUser(HttpServletRequest request)

ModelAndView view = new ModelAndView();

return view;

}

}


Service类为业务逻辑处理类,在类的头部使用注解@Service标注,被注解@Service标注的类会被Spring框架自动注入到Controller类。下面的代码是Service类的样例。

@Service

public class UserServiceImpl implements UserService {

@Override

public InnerResult loginUser(String name, String psw) {

}

}


实体类也是POJO类,也就是MVC的数据模型,实体类仅有属性以及获取和设置属性的get和set方法,没有事务处理方法。下面的代码是实体类的样例。

public class TSUser {

private String id;

private String userName;

private String loginName;

private String password;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getLoginName() {

return loginName;

}

public void setLoginName(String loginName) {

this.loginName = loginName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}


物理架构模型

物理架构模型是给系统部署人员和运营维护人员看的,主要给出系统的部署环境模型,包括网络环境、硬件环境和软件环境。图3-2是系统部署网络环境模型图。

图 3-4 系统部署网络环境模型

从上面网络环境模型图中可以看出,系统部署只需要一台主机,要求支持HTTP协议和远程桌面协议。系统可以考虑部署到阿里云或腾讯云。


文章转载自编程实践楼,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论