为什么使用抽象?
Why Use Abstraction?
我最近被告知我应该在我的代码中更多地使用抽象。我对这件事相当陌生,在研究中我发现了很多关于抽象 classes 的内容,但我指的更多是 "information hiding" 部分,而不是代码本身的功能。
例如,如果我有一个 class 执行一个独特的目的,为什么我要为那个 class 创建一个抽象版本来实现?我无法弄清楚何时使用抽象以及出于什么目的,没有方法主体的基本相同 class 如何改变它的使用方式?主要是为了其他人使用代码吗?如果是这样,是否仍应在更多私人项目中将其作为良好实践来完成?
抽象是编程中比将 类 声明为 abstract
更通用的概念。
抽象与关注点分离相关,主要涉及封装实现细节,远离更高级别或更多抽象代码。
例如,我可能有一个用户对象,持久化到数据库,并想检查用户是否将某些标志设置为 true
以便在视图上看到按钮。
在我的视图代码中,我可以获取数据库连接,运行 一个 sql 查询,将结果反序列化为用户对象,并检查标志,但我没有分离我的担忧。我的视图代码知道很多关于我如何持久化数据、如何获取结果集并将其转换为用户、如何获得数据库连接、数据库结构等...
相反,我应该 abstract 去掉那些细节,这样视图层就可以从 something 获取用户并检查标志。 某物 可以了解数据库的详细信息,甚至可以将其中一些详细信息委托给较低级别的组件。
我最近被告知我应该在我的代码中更多地使用抽象。我对这件事相当陌生,在研究中我发现了很多关于抽象 classes 的内容,但我指的更多是 "information hiding" 部分,而不是代码本身的功能。
例如,如果我有一个 class 执行一个独特的目的,为什么我要为那个 class 创建一个抽象版本来实现?我无法弄清楚何时使用抽象以及出于什么目的,没有方法主体的基本相同 class 如何改变它的使用方式?主要是为了其他人使用代码吗?如果是这样,是否仍应在更多私人项目中将其作为良好实践来完成?
抽象是编程中比将 类 声明为 abstract
更通用的概念。
抽象与关注点分离相关,主要涉及封装实现细节,远离更高级别或更多抽象代码。
例如,我可能有一个用户对象,持久化到数据库,并想检查用户是否将某些标志设置为 true
以便在视图上看到按钮。
在我的视图代码中,我可以获取数据库连接,运行 一个 sql 查询,将结果反序列化为用户对象,并检查标志,但我没有分离我的担忧。我的视图代码知道很多关于我如何持久化数据、如何获取结果集并将其转换为用户、如何获得数据库连接、数据库结构等...
相反,我应该 abstract 去掉那些细节,这样视图层就可以从 something 获取用户并检查标志。 某物 可以了解数据库的详细信息,甚至可以将其中一些详细信息委托给较低级别的组件。