【问题标题】:design patterns, help find best approach [closed]设计模式,帮助找到最佳方法[关闭]
【发布时间】:2016-11-13 13:56:38
【问题描述】:

有一个类Task,它有它的方法和属性。它是我项目中的一个实体。任务就像一个常规的日常任务,它有它的日期、它的标题、正文(实际任务)和状态已完成/未完成,以及上述属性的设置器和获取器。

可以添加新任务或删除任务。根据任务的属性过滤任务,对其进行排序等。这些操作与任务类型的元素列表有关。问题:任务列表是否应该有一个单独的类及其与列表相关的相应方法?如果是这样,Task类和TaskList类之间应该是什么关系?您可以推荐任何设计模式或特定方法吗?

【问题讨论】:

  • 我会使用您描述的方法添加一个 ToDoList 抽象。最好利用抽象数据类型和封装。这就是 OO 的全部意义所在。

标签: c# class oop design-patterns


【解决方案1】:

如果您的任务列表除了常规列表之外没有任何作用,那么恕我直言,您可以创建一个List<Task>

如果你想对列表做一些特别的事情,比如将所有任务标记为已完成,那么你可以将List<Task> 封装在一个名为TaskList 的类中。像这样的:

public class TaskList : List<Task> {
    // extra methods and stuff
}

你问任务和任务列表之间应该是什么关系。好了,你去吧,你可以像上面这样使用继承。或者,您可以像这样在类中存储List&lt;Task&gt; 的私有实例:

public class TaskList : IEnumerable {
    private List<Task> innerList;
}

但是你必须实现更多的方法,如AddRemoveGetEnumerator 等。我有点懒所以我会坚持第一种方法。

【讨论】:

  • 谢谢。我会听从你的建议。很有帮助。
  • 懒惰的程序员是好程序员。
【解决方案2】:

虽然我几乎可以在 @Sweeper 的评论中添加任何内容,但在询问“我应该创建一个新课程吗?”时,这可能是一个有用的问题。是“这个潜在对象是否既知道事情又做事情(例如,同时拥有数据和方法)?”

在您的示例中,可能的 TaskList 方法可能是 CompleteAllShare。如果您要实现这些,请创建一个TaskList 类。如果没有,请使用List&lt;Task&gt;。更好的是,让所有处理集合的方法都依赖于 IEnumerable&lt;Task&gt;ICollection&lt;Task&gt; - 使用 List&lt;Task&gt; 构建您的第一个版本,然后重构以传递一个 TaskList,该任务列表继承自 Sweeper 建议的 List。

我认为您投反对票的原因是这个问题完全属于程序员,而不是 SO。 SO用于解决特定问题,程序员更开放,所以像你这样的问题属于那里。 https://softwareengineering.stackexchange.com/

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多