除了已经介绍的架构原则之外,还有一些软件架构师应该知道的实现良好设计的特定技术。软件架构设计中的一个重要挑战是有效管理各个软件构建模块的相互依赖关系。有时依赖关系无法避免,有时它们甚至是有利的——例如,如果必须向另一个类发送消息,或者必须调用来自不同子系统的特定方法。
重要的是,您始终要讨论设计,并保持您的替代方案和选择开放。模型不是现实,并且应该始终与最终用户和客户进行协调。
退化设计
对于长期频繁修改的软件,随着时间的推移,软件的结构可能会退化。这是一个普遍的问题。一开始,架构师和设计师创建一个干净、灵活的软件结构,这在软件的第一个版本中仍然可以看到。然而,在初始实现之后,需求的变化通常是不可避免的。这意味着软件必须被修改、扩展和维护。如果在此过程中不考虑初始设计,原始结构可能变得难以辨认,并且只能艰难地理解。
有三个基本症状表明存在退化设计:
• 脆弱性
一个地方的更改可能导致其他地方不可预见的错误。
• 僵化
即使是简单的修改也很困难,会影响大量依赖的组件。
• 低可复用性
由于组件之间有很多依赖关系,它们无法单独被复用。
退化设计如下图所示: