inheritance - 如何将属性和行为添加到已编写的类
问题描述
我想知道是否有一个好的做法可以将一些属性和行为添加到已经编写的类中。在我的示例中,我创建了一个基本类 User。现在,在另一个里程碑中,我想添加一个通知系统,并在 User 类中添加一个 NotificationList(以及相关的行为)。在我看来,我有 3 个选择:
- 在我的类 User 中编写新的属性/函数。但是对于每个新功能,我都必须更新一个已经编写、测试等的类。并且每次都会重载 User 类
- 使用继承:扩展用户的类 UserWithNotification,并使用户抽象。但是对于未来的每一个新功能,我将不得不扩展、扩展和扩展......
- 使用装饰器模式,但在我的情况下,我不确定它是否适合
我正在尝试了解项目如何尽可能灵活,以支持在开发后期出现的新功能。感谢帮助 !
解决方案
在这种情况下,我会选择Option 1。如果我猜对了,你要做的就是向User
类添加一个新属性,这对于作为软件应用程序的生物来说是很常见的事情。即使您已经测试了您的User
类,这也将是一个“简单”的新属性添加,它不会对您已经编写的代码产生太大影响。我不太确定 aNotificationList
是关于什么的,但我的猜测是,如果不是所有相关行为,大多数(如果不是全部)都可以并且可能应该放在一个假设的新类Notification
中。
选项 2将在您的代码库中与越来越多不同类型的User
s 混淆。绝对不行。
我认为,正如您所写的那样,选项 3并不真正适合此用例。
总结一下,根据您在问题中提供的上下文,我肯定会选择选项 1,这不仅是最简单的(软件通常应尽可能简单,并且只有在有充分理由时才应复杂化这样做)也是最适合您的用例的那个。
推荐阅读
- reactjs - 我从 typescript 生成的 js 文件没有被使用
- javascript - 如何使可滚动的 div 在滚动并单击时扩展到全高
- javascript - 如何在 cypress 中单击表单按钮而不触发页面加载
- c# - 序列化继承自 ObservableObject 的模型
- javascript - 使用角度获取复选框的值
- mysql - MySQL - 如何在 IN 子句中使用具有逗号分隔字符串值的输入参数
- javascript - 如何按属性计算数组中的对象数?
- c++ - 即时将 coredump 转换为 minidump
- android - 如何将() LiveData 结果发送到现有的 LiveData 对象?
- ios - JSONSerialization 没有在服务器发送时序列化数据