私が作成しているアプリケーションでは、着信ジョブとそれらが実行されるまでの残り時間に関するデータを保持するスケジューラーが必要だったので、本来あるべきものとはかけ離れていると思う非常に単純な実装を作成しました。
実装
インターフェース
public interface IQueue
{
string Name { get; set; }
int Priority { get; set; }
}
クラス
public class TaskScheduler : Queue, IQueue
{
public string Name { get; set; }
public int Priority { get; set; }
public TaskScheduler(string name, int priority)
{
Name = name;
Priority = priority;
}
public void Add(string work, TimeSpan execution)
{
Enqueue(new Job {Work = work, Execution = execution});
}
public Job Get()
{
return (Job) Dequeue();
}
}
public class Job
{
public string Work { get; set; }
public TimeSpan Execution { get; set; }
public override string ToString()
{
return string.Format("{0} will be excuted in {1}", Work, Execution);
}
}
使用法
var schedulerss = new List<TaskScheduler>
{
new TaskScheduler("Meetings", 2),
new TaskScheduler("Jobs", 1)
};
schedulerss = schedulerss.OrderBy(element => element.Priority).ToList(); //ORDER THE schedulers according to the Priority
schedulerss.Find(schedulers => schedulers.Name == "Meetings").Add("Meet Barack Obama", new TimeSpan(1, 0, 0, 15));
schedulerss.Find(schedulers => schedulers.Name == "Jobs").Add("Make a cheese sandwich :D", new TimeSpan(0, 2, 0, 15));
var meetingschedulers = schedulerss.Find(schedulers => schedulers.Name == "Meetings");
if (null != meetingschedulers)
{
foreach (var job in meetingschedulers)
{
Console.WriteLine(job);
}
}
Console.Read();
質問
このコードはうまく機能しますか、それともすべてを見逃しただけで、そのようなことを行うためのより良いアプローチがありますか?
リクエスト
私が提供したコードの欠点と、再利用されたより良いコードを作成するにはどうすればよいかについて、非常に詳細な回答をお願いします (このトピックが役立つと思われる他の人のために)。