何谓系统架构师

首先,何谓系统架构师? IBM工程师的说明是:    架构师的主要责任是提供开发人员和项目经理之间的共用沟通媒体。他们负责让业务规则及需求与工程实践及限制相适应,以确保成功 中文Wiki上的说明是:    系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单 这两个解释,加起来基本说明了系统架构师的定义。 JAVA系统架构师应该看的几本书 Thinking in Java Effective Java UML基础、案例与应用 UML入门提高 软件工匠 设计模式——可复用面向对象软件的基础 重构-改善既有代码的设计 敏捷软件开发-原则、模式、实践 企业应用架构模式 Expert One-on-One J2EE Development without EJB 软件工程——实践者的研究方法 软件领导--成功开发软件的指导准则 后面的两本书,其实已经有点属于项目经理的范畴了,不过还不是很深入,看看对做成功的系统架构师是很有好处。 企业应用的系统架构师应该关注的几个方面 数据持久层的设计 在 Spring和Hibernate,ibatis出来以前,几乎每家公司都有自己的一套方法和架构,而架构师的50%的精力也会集中到这上面,EJB只是 增加架构师的负担。在Spring出来以后,基本上,大多数的架构师都从重复设计这个轮子的无用功中解脱出来了。Rod的轮子太好用了,基本上,大家只要 套上去就行了,或者,剩下最重要的事情,是选择一个合适的数据库连接池的开源项目吧 MVC架构的具体设计 MVC只是个概要的概念,具体如何实现的具体技术很多,根据项目设计最恰当的架构 大并发性访问 使用缓存,在数据量达到一定程度时,使用集群技术,优先考虑利用服务器的集群,其次是硬件集群,最后才是应用本身加入集群功能 超大数据量返回结果 尽量使用分页,优化SQL语句,循环处理数据时尽可能共用对象,只保留关键数据,及时释放内存占用 超大文件的读取和生成 尽可能快的读取大文件,并进行分析。写入大文件时,如何及时释放内存。学会适当利用操作系统的命令行资源来更快完成任务。 多线程的应用和管理 线程池的管理和监控,线程的启动(包括定时启动),结束,回收,线程资源的释放 用户界面可用性设计 平衡速度和可用性,恰当的使用异步和同步技术,展现关键数据为重点 分布式的数据交流和集成 选择恰当的数据交互方式,从最泛滥低效的Web Service到最实用的文件共享 群集系统的管理 如何确保缓存的同步?如何确保对象唯一性?如何保证各台机器的同步? 是否采用EJB?如何利用J2EE的特性(例如JNDI) 复杂的业务规则 [Read More →]

uml入门教程

1 面向对象概述 这是第一节,主要先来确定几个基础的概念. 1.什么是对象 对象(Object)是面向对象的基本构造单元.是一些变量和方法的集合,用于模拟实现世界中的一些事物模型.如一台电脑,一个人,一间房子等.当然也可以模拟一些虚拟的东西,比如一个学号,一个编号,一个院系等. 2.面向对象与面向过程的区别 面向对象"什么做什么"与面向过程"做什么"最大的区别在于,面向对象的重点在于谁发出了什么命令,而面向过程只关心一个命令. 面向对象以对象为基础,以事件或消息驱动对象执行处理.它不像面向过程设计一样以函数为单元,在一开始就需要使用一个主函数,来概适整个程序,像向对象是以部分着手,去构建整个程序.面向对象以数据为中心,使用类作为表现数据的载体,面向过程以功能为中心来捞述程序. 面向对象的程序控制流程以事件或消息来驱动,而面向过程的程序则是以事先预定的程序来执行.所以当需求变化很大的时候,面向过程的程序往往需要重构大部分甚至所有代码,而面向对象则可以轻构解决. 3对象与类 类是对象集合的再抽像,对象是类的实例.可以用一个简单的例子来说明.把中国人当成是一个类,那么你我都是这个类的一个实例.你我等这些中国人的集合抽像成了中国人这个类.中国人是一个虚的概念,而你我是一个实实在在的个体. 4消息和事件 消息是对象与对象之间相互作用的方式.消息一般包括消息的发送对象,消息的接收对象,消息的传递方式,消息的内容,消息的返回五部分组成. 比如张三对李四说:今天我们来喝一杯. 事件是系统预先定义的,通过指定的条件触发的动作. 比如我打一下你的头,你头痛了.  这里我通过"打"这个行为来传递了一个消息对你产生了作用,你触法了"痛"这个事件. 5面向对象的基本特征 抽象:将要描述的事物进行简化,将事物特征进行概括,以事物层次结构来组织模型. 比如:狗.我们在软件中不可能把狗的所有信息都描述出来,我们把它简化为有四条腿,一个头,一个尾巴,还有一个躯杆. 这样我们就像画画一样画出了一个抽象的模型图. 然后对它的特征进行概括,比如它会叫,会吃,会走. 然后狗还分哈巴狗,狼狗等很多种.所以这里又分出了狗的层次. 封装:将对象的状态和行为绑到一起,并且尽可能的隐藏对象的内部细节. 比如:一台电视机,它的所有特征和内部结构都封装起来,我们不需要知道它的内部原理是怎么的,我们只需要知道怎么打开它,怎么换台就够了. 继承:继承是反映客观世界中对象的层次关系.正如上面狗的例子中,我们的狼狗,哈巴狗都继承自一个虚拟的狗的概念中.继承在很大程度上简化了我们的工作,也清淅的展示出了对象的层次关系. 多态:多态是指两个或多个属于不同类的对象,对于同一个消息或方法调用做出不同响应的能力.. 比如:当我们手上拿一个蓝球的时候,我们说:走,打球. 对方就能清楚的理解我们指的打球是指打蓝球或不是足球,乒乓球。 2 面向对象方法分析与设计 1.面向对象分析 面向对象分析的目的是知识客观世界并进行建模. 其实在面向对象的分析过程中也是对需求的分析和理解. 使用面向对象分析的过程一般如下: 获取问题陈述–>确定类–>准备数据字典–>确定关联–>使用继承来细化类型–>完善对象模型–>建立对象动态模型–>建系统功能模型 (1) 获取问题陈述就是与用户一起理解系统,搞清楚系统的业务逻辑,发现用户的需求,在这个时候我们应该以一个用户的身份去看待这些需求.很多设计人员在这个时 候没有做足功能,导致最后系统的设计和维护异常困难,并开始抱怨起用户的变态要求.在搞清楚系统的需求之后,我们不要马上开始编码,如果在这个时候你都已 经写下了几篇代码了,那么恭喜你,以后够你受的了. (2)当得到了足够多的问题并对其理解之后,我们就可以把问题中承现出来的物理实体和概念描述整理出来,暂时把这些标志成一个类实体.然后清除冗余类和与系统不相干的类.最终得到我们的模型实体 (3)把第二步分析出来的类建立一个数据字典,这个数据字典很有可能会在我们的数据库设计中起到很大的作用. (4)通过第二步和第三步,我们已经得到了系统中的实体信息,现在我们就要让各个实体信息之间产生联系. 比如在一个学生选课系统中. 学生被定义为一个实体,课程也被定义为一个实体,通过选课这个行为把两个实体联系起来.这个行为由学生来引发.目标为课程,产生的结果是学生是否成功的选了一门课程.通过这样的分析,在以后的设计过程中我们可以很容易的设计出学生类的方法. 1class Student{ 2 3      public bool ChooseCurriculum(Curriculum curriculum){ 4 5            [Read More →]