架构选择

关于架构选择

我选择的架构是ssh,因为它是目前为止我最熟悉的一个架构了。

SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。

集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO(Data Access Objects)接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring做管理,管理struts和hibernate。

Struts1

Struts对Model,View和Controller都提供了对应的组件。

ActionServlet,这个类是Struts1的核心控制器,负责拦截来自用户的请求。

Action,这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。

Model部分:

由ActionForm和JavaBean组成,其中ActionForm用于将用户的请求参数封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionForm里面的请求参数处理用户的请求。

JavaBean则封装了底层的业务逻辑,包括数据库访问等。

View部分:

该部分采用JSP(或HTML、PHP……)实现。

Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。对应上图的JSP部分。

Controller组件:

Controller组件有两个部分组成——系统核心控制器,业务逻辑控制器。

系统核心控制器,对应上边的ActionServlet。该控制器继承了HttpServlet类,因此可以配置成标注的Servlet。该控制器负责拦截所有的HTTP请求,然后根据用户请求决定是否要转给业务逻辑控制器。

业务逻辑控制器,负责处理用户请求,本身不具备处理能力,而是调用Model来完成处理。对应Action部分。

ssh框架Spring

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

目的:解决企业应用开发的复杂性

功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

范围:任何Java应用

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

ssh框架Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。

•Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。

•SessionFactory接口:SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

•Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

•Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。

•Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。

时间: 2024-10-01 14:37:04

架构选择的相关文章

中大型移动互联网公司技术架构选择(转载)

原文地址:http://2014.54chen.com/blog/2014/03/05/ihaveadream/ 总体思考 总结这些年经验,进行构架演进的方向选择时,大致要做到下面的目标: 可快速开发部署 (五分钟写出来一个经过测试的hello world并可访问/调用,并可在公网访问) 天然可扩展(业务层无状态,尽可能全部放到最后) 自动化(内存不足了,除了报警,应该自动加点机器进去; 新的项目,基础代码应该都不用写,自动生成即可) 框架化(公共层面的东西尽可能框架化,一层类似日志.count

MS Power BI 架构选择指导

Power BI 对于架构选型, 主要有这几个方面的问题,咨询客户. · 1.数据是否可以上云? · 2.分析用户及浏览用户各有多少? · 3.是否能够接受Power BI默认界面? · 4.是否需要与现有系统集成? · 5.是否要求数据权限? · 6.是否需要增加额外功能? 如果客户要本地私有化部署,选择的就是Power BI report server.Power BI Report Server is an on-premises report server with a web port

中大型移动互联网公司技术架构选择

  总体思考 总结这些年经验,进行构架演进的方向选择时,大致要做到下面的目标: 可快速开发部署 (五分钟写出来一个经过测试的hello world并可访问/调用,并可在公网访问) 天然可扩展(业务层无状态,尽可能全部放到最后) 自动化(内存不足了,除了报警,应该自动加点机器进去; 新的项目,基础代码应该都不用写,自动生成即可) 框架化(公共层面的东西尽可能框架化,一层类似日志.counter.trace,应该不需要开发再写一行代码即默认打开) 量化(所有的调用都应该有percentile与rps

作为首席架构师,我是如何选择并落地架构方案的?

如何针对当前需求,选择合适的应用架构,如何面向未来,保证架构平滑过渡,这个是软件开发者,特别是架构师,都需要深入思考的问题. 本文首发于InfoQ垂直号「聊聊架构」,ID:archtime 无架构,不系统,架构是大型系统的关键.从形上看,架构是系统的骨架,支撑和链接各个部分:从神上看,架构是系统的灵魂,深刻体现业务本质. 架构可细分为业务架构.应用架构.技术架构,业务架构是战略,应用架构是战术,技术架构是装备.其中应用架构承上启下,一方面承接业务架构的落地,另一方面影响技术选型. 如何针对当前需

看阿里首席架构师是如何选择并落地架构方案的

如何针对当前需求,选择合适的应用架构,如何面向未来,保证架构平滑过渡,这个是软件开发者,特别是架构师,都需要深入思考的问题. 无架构,不系统,架构是大型系统的关键.从形上看,架构是系统的骨架,支撑和链接各个部分:从神上看,架构是系统的灵魂,深刻体现业务本质. 架构可细分为业务架构.应用架构.技术架构,业务架构是战略,应用架构是战术,技术架构是装备.其中应用架构承上启下,一方面承接业务架构的落地,另一方面影响技术选型. 如何针对当前需求,选择合适的应用架构,如何面向未来,保证架构平滑过渡,这个是软

工业防火墙架构与技术【第二节:硬件架构①】

1.3.   工控防火墙的体系架构 那么工控防火墙是如何设计来支撑其部署到工业生产环境中的?这就需要我们了解工控防火墙的架构,这包括两个方面:软件和硬件两部分.也就是防火墙运行在什么软件系统上以及防火墙安装的硬件平台. 软件和硬件架构是防火墙的骨骼,它决定了防火墙整体的工作水平和性能.一般而言,我们可以把常见的防火墙分为基于硬件防火墙.基于虚拟化架构的防火墙和基于软件的防火墙三类. l  基于硬件的防火墙在硬件方面一般采用了主流的三种架构:X86.ASIC和NP.ASIC和NP是专门设计的实现防

学习领域驱动设计(二)之上下文映射图及架构

前一篇文章 :"学习领域驱动设计开篇"给大家主要了解了下领域驱动设计是什么!这篇文章主要介绍下上下文映射图及架构相关方面的知识. 1.上下文映射图 1.1上下文映射图为何如此重要 当项目中开始采用DDD时,首先你应该为当前的项目绘制一个上下文映射图,该图主要描述当前项目中的限界上下文之间的集成关系!而上下文映射图的作用就是帮助我们从解决方案空间的角度来看待问题.(限界上下文已在上篇文章中介绍了) U表示上游(Upstream).D表示下游(Downstream) 1.2绘制上下文映射图

LAMP架构网站搭建

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台. 随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注. 目前LAMP架构是大多数中小企业最青睐的PHP架构选择,也是众多Linux SA喜欢选择

架构之美阅读笔记06

大多数系统核心的是数据,而不是算法.用户不会接触QuickSort,而是去访问一个数据仓库.数据推动了用户喜欢的产品,所以架构师围绕数据创建了其余的传统"n层"软件站.Facebook即是一个围绕数据建立架构的例子."Facebook社会关系网站"在概念上是一个标准的"n层"栈,用户的请求会从Facebook的内部库中取出数据,然后通过Facebook的逻辑进行转换,最后通过Facebook的界面输出.本章向读者展示了Facebook以一种受控的