软件架构设计原则之合成复用原则
合成复用原则(Composite/Aggregate Reuse Principle,CARP)是指尽量使用对象组合(has-a)/聚合(contanis-a)而不是继承关系达到软件复用的目的。可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。
继承叫作白箱复用,相当于把所有的实现细节暴露给子类。组合/聚合称为黑箱复用,我们是无法获取到类以外的对象的实现细节的。虽然我们要根据具体的业务场景来做代码设计,但也需要遵循 OOP 模型。以数据库操作为例,先来创建 DBConnection 类:
创建 ProductDao 类:
这就是一种非常典型的合成复用原则的应用场景。但是,就目前的设计来说,DBConnection 还不是一种抽象,不便于系统扩展。目前的系统支持 MySQL 数据库连接,假设业务发生变化,数据库操作层要支持 Oracle 数据库。当然,我们可以在 DBConnection 中增加对 Oracle 数据库的支持,但是这违背了开闭原则。其实,我们可以不修改 Dao 的代码,而将 DBConnection 修改为“abstract”的,来看代码:
然后将 MySQL 的逻辑抽离:
再创建 Oracle 支持:
具体选择交给应用层,来看一下类图,如下图所示。
本文为“Tom 弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐!
如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。关注微信公众号“Tom 弹架构”可获取更多技术干货!
版权声明: 本文为 InfoQ 作者【Tom弹架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/967a38867c580c48e969394d4】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论