`
xiao_yi
  • 浏览: 407643 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java软件架构设计慨论

阅读更多
开始之初的架构设计决定着软件产品的生死存亡。“好的开始相当于成功一半”。

  开始的架构设计也是最难的,需要调研同类产品的情况以及技术特征,了解当前世界上对这种产品所能提供的理论支持和技术平台支持。再结合自己项目的特点(需要透彻的系统分析),才能逐步形成自己项目的架构蓝图。

  比如要开发网站引擎系统,就从Yahoo的个人主页生成工具 到虚拟主机商提供的网站自动生成系统,以及IBM Webphere Portal的特点和局限 从而从架构设计角度定立自己产品的位置。

  好的设计肯定需要经过反复修改,从简单到复杂的循环测试是保证设计正确的一个好办法

  由于在开始选择了正确的方向,后来项目的实现过程也验证了这种选择,但在一些架构设计的细部方面,还需要对方案进行修改,属于那种螺旋上升的方式,显然这是通过测试第一的思想和XP工程方法来实现的。

  如果我们开始的架构设计在技术平台定位具有一定的世界先进水平,那么,项目开发实际有一半相当于做实验,是研发,存在相当的技术风险。

  因此,一开始我们不可能将每个需求都实现,而是采取一种简单完成架构流程的办法,使用最简单的需求将整个架构都简单的完成一遍(加入人工干预),以检验各个技术环节是否能协调配合工作(非常优秀先进的两种技术有时无法在一起工作),同时也可以探知技术的深浅,掌握项目中的技术难易点。这个过程完成后,我们就对设计方案做出上面的重大修改,丰富完善了设计方案。

  设计模式是支撑架构的重要组件

  架构设计也类似一种工作流,它是动态的,这点不象建筑设计那样,一开始就能完全确定,架构设计伴随着整个项目的进行过程之中,有两种具体操作保证架构设计的正确完成,那就是设计模式(静态)和工程项目方法(RUP或XP 动态的)。

  设计模式是支撑架构的一种重要组件,这与建筑有很相象的地方,一个建筑物建立设计需要建筑架构设计,在具体施工中,有很多建筑方面的规则和模式。

  我们从J2EE蓝图模式分类http://java.sun.com/blueprints/patterns/catalog.html中就可以很清楚的看到J2EE这样一个框架软件的架构与设计模式的关系。

  架构设计是骨架,设计模式就是肉

  这样,一个比较丰富的设计方案可以交由程序员进一步完成了,载辅助以适当的工程方法,这样就可保证项目的架构设计能正确快速的完成。

  时刻牢记架构设计的目标

  由于架构设计是在动态中完成的,因此在把握架构设计的目标上就很重要,因此在整个项目过程中,甚至每一步我们都必须牢记我们架构设计的总体目标,可以概括下面几点:

  1. 最大化的重用:这个重用包括组件重用 和设计模式使用等多个方面。

  比如,我们项目中有用户注册和用户权限系统验证,这其实是个通用课题,每个项目只是有其内容和一些细微的差别,如果我们之前有这方面成功研发经验,可以直接重用,如果没有,那么我们就要进行这个子项目的研发,在研发过程中,不能仅仅看到这个项目的需求,也要以架构的概念去完成这个可以称为组件的子项目。

  2. 尽可能的简单明了:我们解决问题的总方向是将复杂问题简单化,其实这也是中间件或多层体系技术的根本目标。但是在具体实施设计过程中,我们可能会将简单问题复杂化,特别是设计模式的运用上很容易范这个错误,因此如何尽可能的做到设计的简单明了是不容易的。

  我认为落实到每个类的具体实现上要真正能体现系统事物的本质特征,因为事物的本质特征只有一个,你的代码越接近它,表示你的设计就是简单明了,越简单明了,你的系统就越可靠。更多情况是,一个类并不能反应事物本质,需要多个类的组合协调,那么能够正确使用合适的设计模式就称为重中之重。

  我们看一个具备好的架构设计的系统代码时,基本看到的都是设计模式,宠物店(pet store)就是这样的例子。或者可以这样说,一个好的架构设计基本是由简单明了的多个设计模式完成的。

  3. 最灵活的拓展性:架构设计要具备灵活性 拓展性,这样,用户可以在你的架构上进行二次开发或更加具体的开发。

  要具备灵活的拓展性,就要站在理论的高度去进行架构设计,比如现在工作流概念逐步流行,因为我们具体很多实践项目中都有工作流的影子,工作流中有一个树形结构权限设定的概念就对很多领域比较通用。

  树形结构是组织信息的基本形式,我们现在看到的网站或者ERP前台都是以树形菜单来组织功能的,那么我们在进行架构设计时,就可以将树形结构和功能分开设计,他们之间联系可以通过树形结构的节点link在一起,就象我们可以在圣诞树的树枝上挂各种小礼品一样,这些小礼品就是我们要实现的各种功能。

  有了这个概念,通常比较难实现的用户级别权限控制也有了思路,将具体用户或组也是和树形结构的节点link在一起,这样就间接实现了用户对相应功能的权限控制,有了这样的基本设计方案的架构无疑具备很灵活的拓展性。

分享到:
评论

相关推荐

    Java高级互联网MCA架构师 架构师全景概论

    本课程“Java高级互联网MCA架构师 架构师全景概论”旨在为学员提供全面的Java架构知识,帮助他们掌握成为一名优秀MCA架构师所需的关键技能。 首先,我们来深入理解Java在互联网领域的应用。Java以其跨平台的特性,...

    软件工程概论课程设计

    在本项目中,我们主要探讨的是“软件工程概论”的课程设计,具体实施了一个图书管理系统的完整开发流程。这个过程涵盖了需求分析、系统设计、系统实现以及系统测试四个关键阶段,旨在让学生深入理解和掌握软件工程的...

    山东科技大学软件工程概论期末考试复习资料

    设计阶段主要包括架构设计和详细设计。复习时,要理解模块化、抽象、接口设计、数据结构与算法选择等概念,以及如何使用设计模式进行高效设计。同时,熟悉UML(统一建模语言)图表,如类图、序列图、状态图等。 4....

    软件工程概论期末复习题

    "软件工程概论"是一门基础课程,旨在帮助学生理解软件开发的全过程,包括需求分析、设计、编码、测试和维护。以下是对这个主题的详细阐述: 1. **软件工程定义**:软件工程是一种系统化、规范化的应用程序开发和...

    java 选课系统 设计

    Java 选课系统设计是一个基于B/S架构的软件开发项目,旨在解决传统选课流程中的不便,如信息传递不便捷、选课过程不透明等问题。这种系统通常由学生、教师和系统管理员三种角色组成,分别拥有不同的权限,如学生可...

    Java软件开发求职简历模板

    1. Java 软件开发经验:具有 5 年以上 Java 软件开发经验,包括大规模高并发访问的 Web 应用架构设计和开发经验。 2. 项目管理经验:了解项目管理的基本概念,包括项目计划、风险管理、进度控制、成本控制等。 四、...

    Java概论(面试指南)

    对于五年以上经验的Java开发者,由于他们通常已经有扎实的基础和丰富的项目经验,面试时可能更侧重于项目经历和架构设计方面的讨论。对于这部分求职者,本书提供的帮助可能相对有限。 在编写本书时,作者吸纳了众多...

    软件工程模拟题

    2. **系统设计**:在需求分析的基础上,设计阶段需要考虑软件架构、模块划分、接口设计等。常用的系统设计方法有结构化设计、面向对象设计等,其中面向对象设计强调封装、继承和多态性。 3. **编程实现**:使用合适...

    软件工程 概论RAR

    《软件工程概论》是IT领域的一门基础课程,它主要涵盖了软件开发的全过程,从需求分析、设计、实现到测试和维护等多个阶段。在这个压缩包文件中,我们重点探讨软件工程的基本概念、原理和实践方法。 软件工程是20...

    第1章 软件工程学概论.pptx

    《软件工程学概论》第一章主要探讨了软件工程的基本概念,包括软件的定义、软件危机、软件工程的兴起以及软件的生命周期和开发过程。 首先,软件是计算机系统的重要组成部分,由程序、数据和相关文档组成。程序是...

    软件工程大作业模板—酒店管理信息系统分析与设计

    3. 总体设计:对酒店管理系统的总体架构进行设计,包括数据库设计、用户界面设计等。 4. 详细设计:对酒店管理系统的详细设计,包括数据库设计、算法设计等。 5. 系统实现:对酒店管理系统的实现,包括编码、测试等...

    软件工程概论课程设计---企业人事档案管理系统.doc

    在软件工程概论的课程设计中,企业人事档案管理系统是一个典型的案例,它涵盖了软件工程的多个关键环节,对于学生来说,这是一个很好的实践平台,能够帮助他们将理论知识转化为实际技能,为未来的职业生涯打下坚实的...

    软件工程概论课程设计人事管理系统.doc

    - **系统设计**:根据需求分析结果进行系统架构设计、数据库设计等。 - **编码实现**:选择合适的编程语言和技术栈实现系统功能。 - **测试验证**:进行单元测试、集成测试、系统测试等,确保系统质量。 - **文档...

    java数据库课程设计

    - **掌握基本技能**:熟悉数据库管理和软件设计的基础方法。 - **解决问题能力**:通过实践提高使用数据库理论解决实际问题的能力。 - **技术文档撰写**:培养查阅技术文献、编写技术文档的能力。 **1.2 要求** - *...

    java在线考试系统课程设计_.docx

    - **业务模型**:系统基于B/S架构设计,用户只需要通过浏览器即可访问系统,无需安装额外的客户端软件。 通过以上分析可以看出,本项目的重点在于构建一个功能全面、易于使用的在线考试平台,不仅能满足学生和教师...

    网络订餐系统的设计与实现软件工程课程设计(常用版).doc

    系统设计是软件开发的第二步骤,它涉及到对软件架构的设计、数据模型的设计和用户界面的设计。网络订餐系统的设计主要包括总体设计、模块设计和数据库设计。总体设计是指对系统的整体架构的设计,例如系统的模块结构...

    java毕业设计常用参考文献.pdf

    【Java毕业设计常用参考文献】涉及的Java技术领域广泛,主要涵盖了Java Web开发中的核心技术和框架,以及相关的软件工程和数据库理论。以下是这些参考文献中包含的重要知识点: 1. **JSP (JavaServer Pages)**: 冯...

    游戏设计概论游戏设计概论考试卷模拟考试题.docx.docx

    根据提供的文档内容,我们可以总结出一系列关于游戏设计的重要知识点,这些知识点覆盖了游戏设计的基础理论、游戏类型划分、游戏设计过程中的关键要素和技术实现等方面。 ### 游戏设计基础概念 1. **游戏中的物品*...

    java毕业设计常用参考文献.docx

    通过这些文献,学生可以系统地学习Java编程、Web开发、软件工程、数据库管理和框架应用等方面的知识,为完成高质量的Java毕业设计打下坚实基础。同时,了解最新的研究动态和技术趋势,有助于提升设计的创新性和实用...

Global site tag (gtag.js) - Google Analytics