【问题标题】:How to decide if this should be split into 2 classes or kept in the same class?如何决定是否应该将其分为 2 个班级或保持在同一个班级?
【发布时间】:2011-06-08 18:39:09
【问题描述】:

我有一个包含一些项目列表的页面。每个项目都有一些属性:cmets、图像、标题、cmets 表单和内容。创建一个名为item 的类似乎很简单,它将代表列表中的单个项目。

但是,我还有一个“孤立”项目,用于将新项目添加到列表中。例如,它具有所有相同的属性、文本框、按钮等,用于添加图像、编写内容等,但它没有存储在数据库中,并且它有一个新的“添加”按钮,可以将其保存到数据库,并且它的然后添加到列表中。

我是否还应该只创建一个名为 item 的类,并只创建一个名为 isSaved 之类的属性来确定是否显示“添加”按钮、是否为其显示评论表单等?

或者我应该创建 2 个单独的类,调用一个 newItem 并将其用于孤立项目,另一个 savedItem 并将其用于已在数据库中的项目?

另外,这是在 javascript 中,所以我认为我不能使用太多继承。

【问题讨论】:

  • javascript 可以很容易地使用原型或仅使用 jQuery 扩展来继承。 IMO,您应该将对象的 UI 与其数据分开。有一个“类”来保存所有数据,然后将数据绑定到 UI 元素。

标签: javascript jquery oop design-patterns class-design


【解决方案1】:

一般来说,当行为或属性需要更改时,您可以进行子类化。如果唯一的区别是对象是否保存到数据库中,则很可能它不是子类的候选对象。添加诸如isSaved 之类的属性可能是最好的选择。除非,也就是说,一个人的行为在保存/未保存时与另一个人的行为根本不同。

【讨论】:

  • 不同的是,如果未保存,则需要显示用于输入标题/内容的文本框,而如果已保存,则仅显示保存的标题/内容和用于编辑它们的按钮它切换文本框,如果它只保存,那么评论表单变得可见。你有什么建议?
  • 我不确定这是在什么样的环境中创建的,但您所描述的通常是查看代码。我个人的观点(尽管有很多很多人共享)是 MVC(模型-视图-控制器)架构(或其中的一些变体)是构建应用程序的正确方法。如果您保持这种逻辑分离,那么该代码无论如何都不属于您的模型。相反,视图将根据isSaved 是真还是假来显示表单或显示内容。
  • 是的,谢谢,这就是答案,我将把它分成两个视图并使用isSaved 来确定要显示的视图。欢呼
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多