论文作者:David Garlan and Mary Shaw
论文时间:January 1994
论文地址(pdf):http://www.cs.cmu.edu/afs/cs/project/vit/ftp/pdf/intro_softarch.pdf
论文地址(HTML):https://www.researchgate.net/publication/229124515_An_Introduction_to_Software_Architecture
Abstract
As the size of software systems increases, the algorithms and data structures of the computation no longer constitute the major design problems. When systems are constructed from many components, the organization of the overall system—the software architecture—presents a new set of design problems. This level of design has been addressed in a number of ways including informal diagrams and descriptive terms, module interconnection languages, templates and frameworks for systems that serve the needs of specific domains, and formal models of component integration mechanisms.
In this paper we provide an introduction to the emerging field of software architecture. We begin by considering a number of common architectural styles upon which many systems are currently based and show how different styles can be combined in a single design. Then we present six case studies to illustrate how architectural representations can improve our understanding of complex software systems. Finally, we survey some of the outstanding problems in the field, and consider a few of the promising research directions.
“随着软件系统规模的增长,算法和数据结构不再是主要的设计问题。当系统由多个组件组成的时候,整个系统的组织——也就是所谓的软件架构——会导致一系列新的问题。”
设计不同规模的软件系统,所面对的复杂度是不一样的。系统设计和模块设计,明显抽象的层次不一样。模块设计更具体,关注模块的逻辑和实现,面临的复杂度一般可以通过设计模式、算法和数据结构来解决;而系统设计更抽象,是根据当前要设计的系统复杂度做判断和取舍,面对的复杂度往往是高性能、高并发、高可靠、可扩展、可伸缩、安全性中的一个或多个,再根据复杂度去设计解决方案。
每一种复杂度都有自己范畴的问题本质、方法论和工具(抽象一点就是道、术、器)。在运用方法论和使用工具的时候,不能偏离问题本质;方法论用于设计该复杂度的解决方案,而工具则可以将该方案实施落地。