2016-07-11 3 views
1

Существует класс Task, который имеет свои методы и свойства. Это объект в моем проекте. Задача - это обычная ежедневная задача, которая имеет свою дату, название, тело (фактическую задачу) и статус завершен/не завершен, а также сеттеры и геттеры для описанных выше свойств.шаблоны проектирования, найти лучший подход

Можно добавить новую задачу или удалить задачу. Отфильтруйте задачи на основе своих свойств, сортируйте их и т. Д. Эти операции связаны со списком элементов типа Task. Вопрос. Должен ли быть отдельный класс для списка задач и его соответствующих методов, связанных с этим списком? Если да, то какова должна быть связь между классом Task и классом TaskList? Любой шаблон дизайна или конкретный подход, который вы могли бы порекомендовать?

+1

Я бы добавил абстракцию ToDoList с описанными вами методами. Хорошо использовать абстрактные типы данных и инкапсуляцию. Вот что такое OO. – duffymo

ответ

3

Если ваш список задач не делает ничего больше, чем обычный список, тогда IMHO вы можете просто создать List<Task>.

Если вы хотите сделать что-то особенное в списке, скажем, помечая все выполненные задачи, то вы, вероятно, можете инкапсулировать List<Task> в класс под названием TaskList. Что-то вроде этого:

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

Вы спрашивали, какова должна быть связь между задачей и списком задач. Ну, вот и все, вы можете использовать наследование так же, как выше. Кроме того, вы можете хранить частный экземпляр List<Task> в классе, как это:

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

Но тогда вы должны реализовать гораздо больше способов, как Add, Remove, GetEnumerator и т.д. Я вроде ленивый, так что я бы придерживаться первого метода.

+0

Спасибо. Я последую вашему совету. Очень полезно. – dekrypto

+1

Ленивые программисты - хорошие программисты. –

2

Хотя я могу добавить почти ничего в комментарий @ Sweeper, возможно, полезный вопрос, когда вы спрашиваете «должен ли я создать новый класс?». «Знает ли этот потенциальный объект и вещи и что-то делать (например, имеют как данные, так и методы)?»

В вашем примере возможные методы TaskList могут быть CompleteAll или Share. Если вы собираетесь их реализовать, сделайте класс TaskList. Если нет, используйте List<Task>. Еще лучше, чтобы все ваши методы, связанные с коллекциями, зависели от IEnumerable<Task> или ICollection<Task> - создайте свою первую версию с помощью List<Task> и рефакторируйте позже, чтобы передать TaskList, который наследует от List as Sweeper.

Я думаю, что причина, по которой вы получаете downvotes, этот вопрос правильно принадлежит программистам, а не SO. SO предназначено для решения конкретных проблем, программисты более открытые, поэтому такие вопросы, как ваша, принадлежат. https://softwareengineering.stackexchange.com/

+0

Получил. спасибо – dekrypto

Смежные вопросы