软件设计的一个共同目标似乎是构建应用程序,以便更改影响最小数量的组件(即编译的程序集),然后可以单独发布这些组件。应用了依赖倒置原则,因此稳定的组件不依赖于易失的组件,类再次以某种方式打包以将部署限制为最小的组件集。
所以我的问题是,每次更改都发布整个应用程序有什么问题?特别是如果发布是完全自动化的一键式解决方案。当然,单独部署组件意味着我必须将它们作为具有自己依赖项的迷你项目单独进行版本控制和管理?很大一部分“好设计”似乎都依赖于这样一个原则,即分别发布每个组件是一件好事,但为什么呢?
软件设计的一个共同目标似乎是构建应用程序,以便更改影响最小数量的组件(即编译的程序集),然后可以单独发布这些组件。应用了依赖倒置原则,因此稳定的组件不依赖于易失的组件,类再次以某种方式打包以将部署限制为最小的组件集。
所以我的问题是,每次更改都发布整个应用程序有什么问题?特别是如果发布是完全自动化的一键式解决方案。当然,单独部署组件意味着我必须将它们作为具有自己依赖项的迷你项目单独进行版本控制和管理?很大一部分“好设计”似乎都依赖于这样一个原则,即分别发布每个组件是一件好事,但为什么呢?
每次更改都发布整个应用程序有什么问题?
如果你能驾驭它,我认为没有任何问题。这似乎是 Facebook 采取的方法:
由于 Facebook 的整个代码库都被编译为单个二进制可执行文件,因此该公司的部署过程与您通常在 PHP 环境中所期望的完全不同。Rossi 告诉我,代表整个 Facebook 应用程序的二进制文件大小约为 1.5GB。当 Facebook 更新其代码并生成新版本时,必须将新的二进制文件推送到公司的所有服务器。
部分部署有时对于维护组件团队之间的一定程度的自主性很有用,但如果组件的特定版本组合尚未经过测试,它们可能会导致意外行为。
然而,模块化设计的动机更多是围绕易于更改(可进化性、可维护性、低耦合、高内聚)而不是进行部分部署的能力。