突然明白:架构是一种平衡。
架构师要做的只是平衡,平衡软件项目相关的所有因素。这些因素包含项目的需求(性能需求,扩展性需求)、项目资源(时间,金钱,人员,硬件)、技术等等。
举一例:你要为一项目选择要使用的语言,.net还是java。虽然大多数情况下很容易决定,但你要考虑的因素不少。如:项目组成员擅长语言、项目的时间、项目需求等等。你所要做的只是找出平衡点。
再一例:项目是使用c/s,还是b/s,两层还是多层。c/s虽然客户端功能强大,但需要部署;b/s部署方便,但功能受限;多层扩展性好,复用性好,但工程量比两层大,同时也意味者需要更多的时间,金钱,人员。这些就是你要平衡的因素。
曾经听过一个例子:一公司架构十分混乱,公司使用了两种数据库sqlserver、 db2;既有VF的软件,又有.net的软件;通讯方式既有Webservice又有socket;服务器既有windows又有liunx;但是但你仔细分析了公司的需求和公司遗留软件的情况,你会发现这个混乱架构竟然是最合适的。
现在新技术不断出现,一个项目使用的技术也是一个关键,比如:是自己写个简单架构,还是使用现有的spring等;是使用Hibernat(NHibernat)来访问数据库,还是自己写个sqlhelp来访问数据库;是用socket对接,还是webservice;这些因素可能会直接决定项目的成败,而要作出选择需要考虑多方面:项目的大小、遗留的软件、人员对这些技术的熟悉程度、时间、需求等等。你需要找到最佳平衡点。
很多情况下,会出现两难的选择,那时就需要你综合所有的因素,找出最佳的平衡点。
没有完美的架构,只有你平衡了所有因素,你就找到了最合适的架构。
找到一个最佳的平衡点,需求长期的经验和你对各种架构的了解。
架构是一种平衡艺术,平衡时间,平衡需求,平衡资源,平衡....