Ottenere lista di oggetti della stessa classe

2

Ho una "Task" di classe che rappresenta qualsiasi attività svolta da un singolo dipendente. Per questa classe ho scritto proprietà come EmpID, Priorità, ecc. E metodi come AddNewTask(), ArchiveTask(), MoveTaskToUser(int userid), ecc. Quindi ho scritto un metodo

public List<Task> GetAllTasks()

Questo mi sembrava scorretto riguardo a OOP. Ho pensato che ogni singolo oggetto compito dovrebbe rappresentare una singola attività e non sembra giusto chiamare taskObj.GetAllTasks() perché objectObj deve eseguire i metodi sulla singola attività che rappresenta. Così ho cambiato il metodo in statico:

public static List<Task> GetAllTasks()

Ora chiamo Task.GetAllTasks() . È questo il modo corretto per seguire l'approccio orientato agli oggetti. L'idea precedente di chiamare il metodo dal singolo oggetto era corretta?

    
posta ronilk 01.02.2014 - 03:04
fonte

2 risposte

1

L'approccio statico è un buon inizio. Potresti anche scrivere una classe che gestisca tutte le attività. Potresti quindi dire:

TaskManager.addTask(/*whatever params are necessary*/);
TaskManager.getTask(/*whatever identifier you desire*/);
TaskManager.getTasksOfEmployer(/*employer-id*/);
TaskManager.getAllTasks();
TaskManager.updateTask();
etc...
    
risposta data 01.02.2014 - 06:45
fonte
2

Ho fatto qualcosa di simile in passato e ho usato un tipo di oggetto TaskList che conteneva l'elenco di oggetti Task e gestisce l'aggiunta, la rimozione e il recupero di ciascuna delle attività. Ogni attività ha implementato un'interfaccia ITask con una proprietà Name che è stata utilizzata per recuperare un'attività.

public interface ITask
{
    string Name { get;set; }
    void Execute();
} 

Ogni attività implementerebbe questa interfaccia e in quanto tale la classe che gestisce le attività non ha bisogno di sapere nulla di particolare, sa solo che può chiamare il metodo Execute e un'attività eseguirà la sua azione.

public class TaskList
{
    private List<ITask> _taskList = new List<ITask>();
    public void Add(ITask task)
    {
        //Check for null / duplicate task
        _taskList.Add(task);
    }

    public void GetTask(string name)
    {
        foreach(var task in _taskList)
        {
            if(task.Name.Equals(name))
                return task;
        }
        throw new ArgumentOutOfRangeException();
    }

    public void Remove(ITask task)
    {
        if(_taskList.Contains(task))
            _taskList.Remove(task);            
    }
}

Spero che questo aiuti un po '.

    
risposta data 01.02.2014 - 15:23
fonte

Leggi altre domande sui tag