Good architects are often formed by having better architects mentor them (Waldo 2006). One
reason may be that there are certain concerns that are common to nearly all projects. We have
already alluded to some of them, but here is a more complete list, with each concern phrased
as a question that the architect may need to consider during the course of a project. Of course,
individual systems will have additional critical concerns.
Functionality
What functionality does the product offer to its users?
Changeability
What changes may be needed in the software in the future, and what changes are unlikely
and need not be especially easy to make in the future?
Performance
What will the performance of the product be?
Capacity
How many users will use the system simultaneously? How much data will the system need
to store for its users?
Ecosystem
What interactions will the system have with other systems in the ecosystem in which it
will be deployed?
Modularity
How is the task of writing the software organized into work assignments (modules),
particularly modules that can be developed independently and that suit each other’s needs
precisely and easily?
Buildability
How can the software be built as a set of components that can be independently
implemented and verified? What components should be reused from other products and
which should be acquired from external suppliers?
Producibility
If the product will exist in several variations, how can it be developed as a product line,
taking advantage of the commonality among the versions, and what are the steps by which
the products in the product line can be developed (Weiss and Lai 1999)? What investment
should be made in creating a software product line? What is the expected return from
creating the options to develop different members of the product line?
In particular, is it possible to develop the smallest minimally useful product first and then
develop additional members of the product line by adding (and subtracting) components
without having to change the code that was written previously?
Security
If the product requires authorization for its use or must restrict access to data, how can
security of data be ensured? How can “denial of service” and other attacks be withstood?
Finally, a good architect realizes that the architecture affects the organization. Conway noted
that the structure of a system reflects the structure of the organization that built it (1968). The
architect may realize that Conway’s Law can be used in reverse. In other words, a good
architecture may influence an organization to change so as to be more efficient in building
systems derived from the architecture.
功能,可变性,性能,容量,生态系统,模块性,可构建性,可生产,安全性
这里中文只作一个简单参考,其中的Modularity和Buildability两者比较搞,慢慢细分
Modularity:按模块来设计,可以并行开发,且彼此之间容易且精确配合
Buildability:是可否构建一系列组件,可以被独立实现与验证