zoukankan      html  css  js  c++  java
  • 架构之美随笔一------论架构

      翻开这本书之前对架构的理解是很模糊的,之前总是听老师再说架构什么的自己其实一直都不理解何为架构。在书本的开头作者就明确的告诉我们架构是什么?架构是架构师洞见一个待开发系统的内在的结构、规律、原则和逻辑的过程,而不是一个已经完整显示出来的,可以画出图纸的结果。优秀的架构师可以将自己放在系统中去的,在清晰地理解了系统之后,简洁地描述出构建好的体统架构。当架构师拿出他所描述的“作品”的时候,事实上架构这一过程就已经结束了。

      好的系统架构展示了架构完整性。也就是说,它来自于一组设计规则,这组规则有助于减少复杂性,并可以用于指导详细设计和系统验证。设计规则可能包含特定的抽象,这些抽象总是以同样的方式使用,诸如虚拟设备等。这些规则可能表现为一种模式,如管道和过滤器。在最理想的情况下,存在一些可以用于验证的规则,如“在设备失效时,所有某一类的虚拟设备都可以用任何其他同类的虚拟设备代替”,或“所有竞争同一资源的进程必须具有相同的调度优先级”。

      当代的架构师可能会说,待构建的对象或系统必须具有以下特征:

    • 具备客户要求的功能。
    • 能够在要求的工期内安全地构建。
    • 性能足够好。
    • 可靠性。
    • 可用的,并且使用时不会造成伤害。
    • 安全的。
    • 成本是可以接受的。
    • 符合法规标准。
    • 将超越前人以及竞争者

      软件开发项目需要一些人在软件构建时扮演架构师的角色,就像构建或修复建筑时传统的建筑师的角色一样。但是,对于软件系统来说,从来就弄不清楚哪些决定属于架构师的职责范围,哪些决定要留给实现者。定义架构师在软件项目中做什么,比建筑时的类似定义更困难,原因有三个因素:缺少传统、产品无形性和系统复杂性。好的架构师通常来自更好的架构师的现场指导。原因之一可能是有一些关注点几乎在所有项目中都会出现。架构师在项目过程中需要考虑的其实有很多诸如:

    • 功能性(产品向它的用户提供哪些功能?)
    • 可变性(软件将来可能需要哪些改变?哪些改变不太可能发生,不需要特别容易进行这些改变?)
    • 性能(产品将达到怎样的性能?)
    • 容量(多少用户将并发使用该系统?该系统将为多少用户保存数据?)
    • 生态系统(在部署的生态环境中,该系统将与其他系统进行哪些交互?)
    • 模块化(如何将编写软件的任务分解为工作指派(模块),特别是这些模块可以独立地开发,并能够准确而容易地满足彼此的需要?)

      因而架构不易,需要我们在实际的实验和项目中不断的总结和理解,软件架构还是需要多看,多学习了解其它的系统是怎么做的,有哪些可用的组件,对各种方法有思考有借鉴,最终形成自己的想法才是干货。工作和学习当中,还是要多花时间进行思考和设计,不要太急于动手了。

  • 相关阅读:
    x64 平台开发 Mapxtreme 编译错误
    hdu 4305 Lightning
    Ural 1627 Join(生成树计数)
    poj 2104 Kth Number(可持久化线段树)
    ural 1651 Shortest Subchain
    hdu 4351 Digital root
    hdu 3221 Bruteforce Algorithm
    poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
    hdu 4031 Attack(BIT)
    LightOJ 1277 Looking for a Subsequence
  • 原文地址:https://www.cnblogs.com/Againzg/p/6384497.html
Copyright © 2011-2022 走看看