封装
2022-05-12 本文已影响0人
寻找无名的特质
封装
应用程序的不同部分应通过封装与应用程序中的其他部分隔离开。 只要不违反外部协定,应用程序组件和层应能在不中断其协作者的情况下调整其内部实现。 正确使用封装有助于在应用程序设计中实现松散耦合及模块化,因为只要维持相同的接口,就可以用替代实现来替代对象和包。
在类中实现封装的方式是限制对该类的内部状态的外部访问权限。 如果外部参与者想操作对象的状态,则应通过明确定义的函数(或属性 setter)来进行操作,而非直接访问该对象的私有状态。 同样,应用程序组件和应用程序本身应公开明确定义的接口供协作者使用,而非让协作者直接修改其状态。 通过此方法,只要公共协定得到维护,你就可以不断改进应用程序的内部设计,而无需担心会中断协作者。
可变全局状态与封装是对立的。 不能依赖从一个函数中的可变全局状态获取的值在另一个函数中(甚至在同一个函数中)具有相同的值。 理解可变全局状态问题是 C# 语言等编程语言支持不同范围规则的原因之一,从语句到方法再到类,这些规则被广泛使用。 值得注意的是,对于依赖中央数据库在应用程序内部和之间进行集成的数据驱动的体系结构,他们本身选择依赖由数据库表示的可变全局状态。 域驱动的设计和整洁的体系结构的一个重要考虑因素是如何封装对数据的访问,以及如何确保应用程序状态不会因直接访问其持久性格式而无效。