标签:
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领域驱动
标签:
原文地址:http://www.cnblogs.com/tintindeng/p/5002312.html