企业级

Part1 软件架构javascript

“架构”是依据业务设计组件、模块、框架、类等不一样粒度的单元将其组合的策略。没有理想上通用的架构,不一样的软系统的着重点不一样。(业务逻辑复杂、并发性能高、扩展性好)前端

架构五视图概念:物理架构(安装、部署需求)、逻辑架构(业务需求)、数据架构(数据需求)、开发架构(代码扩展、重用需求)、运行架构(运行性能安全需求)。java

开发中须要挖掘、分析清需求,利用多视图设计出架构模型。最后转换成组件、模块  、接口、类进行验证。git

RUPweb

需求分析创建用例图为用例添加规约。(用例描述)spring

制做原型界面确认需求。数据库

编写SRS文档。apache

RUP在迭代中找出风险性最大架构问题,尽可能减小风险,XP里由核心用户故事来驱动)编程

领域建模与需求分析同步进行。json

模型创建与领域专家交流。

精化领域模型设计模块、接口、类。

 

概念架构分层,层次中加入鲁棒图分析。

 

 

 

Part2架构模式

三层架构:表现层、领域层、数据层,后两层绝对不要依赖表现层。

组织领域逻辑三种模式:事务脚本、表模块、领域模型,尽可能使用领域。

领域模型粒度尽可能小。

避免实体bean重进入。(一个对象改变了bean状态,不该再被另外一个对象使用)

可在领域层加薄服务层提供接口与客户层链接。

 

数据访问建议:

控制粒度尽可能减小数据库访问次数,使用join避免屡次进入,利用ormaping框架,使用链接池。

合理设计数据表继承结构。

(三范式 1nf字段不可再分 2nf非关键字依赖本身关键字 3nf 不存在传递依赖 )

先领域模型设计而不是先设计数据库表

避免长事务,减小事务隔离提升灵活。

 

数据源架构:表数据入口(表对应记录集)、行输入入口(行对应类)、活动记录(同行输入入口将逻辑加入类)、数据映射器(数据对应领域对象)

反射编写数据映射器或使用开源mapping工具

使用mapping设计时注意对象的工做单元、标识域、继承、延时加载、缓存

备忘数据可对象序列化(类对象、jsonxml)保存BLOB

 

 

 

表现层之web

模型(对象)

页面控制器(跳转)、前端控制器(interpret filer、装饰)、应用控制(逻辑调用)

模板视图、转换视图

 

客户端会话cookie (可加密防篡改)

服务端会话 session (占内存可序列化保存)

数据库会话 建临时字段(状态保存与 客户端、服务端会话数据比较)

 

 

Part3轻量架构

发展:

EJB测试困难严格的单元测试和测试驱动开发TDD日益变流行。

开发人员不断寻找更简单的EJB代替品。J2eeservletjspjmsrmijdbc都是好的规范惟独ejb

架构知足业务需求的能力以经验评测,不是全凭主观臆断、一厢情愿。

Xp教咱们怎么思考。

 

EJB服务:目录JNDI、事务JTSJTA、链接JCA、资源池、线程管理、entity bean

HibenateJDO代替entity bean

AOP(spring)声明式事务

业务对象线程池缓存:web应用时Web容器提供线程池无需再业务层在提供,只有用RMI才须要。

 

开发指导:

参考架构:开源框架中的模板,若是你的模板是基于一个应用(sun java PetStore)而不是一个框架结果多半失败。

工具:eclipseintellijsvngitjunitantmavenspringjdohibernatestruts

 

 

业务服务层:接口形式、oo、内部机制不该过复杂、独立表现层、不直接与数据层打交道、有事务管理、易测试、可伸缩性、尽可能无状态(如把状态保存web层)、ioc达到接口现实分离

业务对象和表现组建运行在同一jvm,因此搭建集群部署到新jvm实现水平扩展。

活动记录在领域对象中包含数据访问逻辑,是entity bean和传统持久化框架使用的方法。

数据映射器包含全部持久化逻辑。TOPLINK经过共享缓存访问读取对象,若是不为对象克隆就不能修改对象不然会破坏共享缓存。

业务逻辑框架选用spring;支持远程客户端可用hessianbutlapweb servicesoap服务apache axisclue);

不少web应用没有清晰的业务服务层,每每依附web层框架(如struts);

OO编程模式很难处理一些与实际正交需求(如:安全性)而spring经过AOP能解决。  

AOPOOP的补充,横切方法拦截。

把精力集中在问题领域上而不是技术自己。

DTOVO都是伪对象尽少使用,OO原则很重要

 

 

表现层:业务逻辑独立于表现层。

Web应用web层:(expert one on one j2ee design and development 1213章)

技术strutswebworkmaverickjspvelocityjavascript

 

Servlet+jspmvc

 

 

 

数据层:使用o/r mapping工具使得领域对象可包含业务逻辑,领域模型就是有对象而不是哑数据容器构成了。

  

EJB 无状态会话Bean SLSB)的审视:

声明性事务管理:spring提供基于AOP的声明事务管理,支持多数据库的JTAJDBC,回滚规则配置,编程性事务。

远程调用:web应用中将web组件和业务组件方在同一JVM比较好,须要远程调用暴露web services接口可行。

集群:EJB有状态会话bean的集群能力差,一般集群可经过J2eeweb容器、web

服务器或者硬件设备处理。

线程管理:实现不读写实例变量的多线程服务对象这种方法在servletsturts action中工做的很是完美,使用命令模式为每一个请求建立实例消除对象内部并发,使用java同步、并发库。

实例池:slsb缓冲池是节省内存,spring实例池commonsPoolTargeSourse,如今jvm垃圾收集效率高内存也便宜。

资源管理:将数据库链接放入资源池,dbcp等作得很好。

安全:用AOP实现声明性自定义安全性,自定义安全拦截器。

业务对象管理:Spring做为对象工厂,spring提供缓冲池,ioc功能代替jndi查找。

 

开源方案:

Ao--SpringNanning AspectesJboss4

Ioc--SpringPicoContainer(可与Nanning集成)、HiveMind

O/R--HibernateJDOiBatis

Web service--GLUE

 

性能:

响应时间:应用程序处理一个请求的时间(如http请求)

延时时间:从应用程序获得反馈所需最小时间。

吞吐量:一段时间内所能进行的工做总和,web应用经常使用每秒点击率衡量,事务处理程序则是每秒完事务数。

可伸缩性:指应用程序如何对应增加流量。可伸缩常等价于水平伸缩性(向上伸缩)集群是一种。垂直伸缩在每台服务器上运行多份服务,如添加cup、内存。

缓存(能够进行缓存的地方):数据库、O/R mapping、业务对象(业务层用aop缓存)、web层对象、过滤器与jsp标签缓存、HTTP头控制浏览器web缓存

优化:控制继承树深度、直接访问字段而非方法访问、用局部变量代替实例变量、去除没必要要log

 

Spring

Spring是一个应用框架而不是webiocaop或者中间层框架什么的。

国人应用框架jdom

Bean工厂:依赖注入

应用上下文:在bean工厂基础上增长对信息

 

 

 

 

 

Part4敏捷

Part5领域驱动

相关文章
相关标签/搜索