实现属性或实现子类

2022-09-03 05:42:33

我有一个名为它的类,顾名思义,它构建列表输入字段。这些列表输入字段允许用户为每个列表选择一个项目。List_Field

我希望能够构建允许用户为每个列表选择多个项目的列表输入字段,因此我面临以下困境:

我应该通过将属性实现到现有属性中来执行此操作,还是应该实现该类的子类?multiple_choice_allowedList_FieldMultiple_Choice_List_FieldList_Field

当遇到这样的困境时,我应该遵循的工程原理是什么?


答案 1

看看 SOLID 原则。他们会在你的设计中帮助你。特别是,单一责任原则会告诉你不要把两个问题混为一谈,而Liskov替换原则会告诉你不要创建破坏超类契约的子类,就像你也提出的那样。

那么,就您而言,解决方案是什么?您可以创建一个与选择类型无关的抽象基类,然后创建 2 个子类,一个用于单个选择,另一个用于多个选择。


答案 2

取决于对象进化的存在与否 - 如果你想要特殊情况,子分类或注入(DI)“选择”行为(策略)是好的。

但是,如果您还想让Field_List动态地改变其行为,那么属性或变异方法是唯一的出路。

示例:具有不同“计划”的注册屏幕 - 基本,您只能选择一件事和高级,您可以在其中根据需要选择尽可能多的内容。计划的更改将在下拉和多个复选框之间切换,同时仍然具有相同的对象,包括其内容。

我会投票支持属性/突变方法。