Designing Software Architectures: A Practical Approach (SEI Series in Software Engineering) [Hardcover]