您的位置:首页 > 其它

企业级

2015-11-28 10:52 148 查看
Part1 软件架构

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

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

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

RUP:

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

制作原型界面确认需求。

编写SRS文档。

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

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

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

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

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

Part2架构模式

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

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

领域模型粒度尽量小。

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

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

数据访问建议:

控制粒度尽量减少数据库访问次数,使用join避免多次进入,利用ormaping框架,使用连接池。

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

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

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

避免长事务,减少事务隔离提高灵活。

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

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

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

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

表现层之web

模型(对象)

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

模板视图、转换视图

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

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

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

Part3轻量架构

发展:

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

开发人员不断寻找更简单的EJB代替品。J2ee中servlet、jsp、jms、rmi、jdbc都是好的规范唯独ejb。

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

Xp教我们怎么思考。

EJB服务:目录JNDI、事务JTS和JTA、连接JCA、资源池、线程管理、entity bean。

Hibenate和JDO代替entity bean

AOP(如spring)声明式事务

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

开发指导:

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

工具:eclipse、intellij、svn、git、junit、ant、maven、spring、jdo、hibernate、struts

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

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

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

数据映射器包含所有持久化逻辑。TOPLINK通过共享缓存访问读取对象,如果不为对象克隆就不能修改对象否则会破坏共享缓存。

业务逻辑框架选用spring;支持远程客户端可用hessian、butlap、web service(soap服务apache axis、clue);

很多web应用没有清晰的业务服务层,往往依附web层框架(如struts);

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

AOP是OOP的补充,横切方法拦截。

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

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

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

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

技术struts、webwork、maverick、jsp、velocity、javascript

Servlet+jsp的mvc

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

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

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

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

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

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

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

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

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

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

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

开源方案:

Ao--Spring、Nanning Aspectes、Jboss4

Ioc--Spring、PicoContainer(可与Nanning集成)、HiveMind

O/R--Hibernate、JDO、iBatis

Web service--GLUE

性能:

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

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

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

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

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

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

Spring

Spring是一个应用框架而不是web、ioc、aop或者中间层框架什么的。

国人应用框架jdom。

Bean工厂:依赖注入

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

Part4敏捷

Part5领域驱动
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: