2016-07-11 12 views
1

メソッドとプロパティを持つクラスTaskがあります。私のプロジェクトのエンティティです。タスクは、日付、タイトル、ボディ(実際のタスク)、ステータスの完了/未完了、上記のプロパティのセッターとゲッターを持つ通常の日常タスクと同様です。デザインパターン、最適なアプローチを見つけるのに役立ちます

新しいタスクを追加したり、タスクを削除することができます。プロパティに基づいてタスクをフィルタリングし、並べ替えます。これらの操作は、タスクタイプの要素のリストに関連しています。質問:タスクのリストとそのリストに関連するメソッドに別のクラスが必要ですか?もしそうなら、TaskクラスとTaskListクラスの関係はどうすればよいですか?どんなデザインパターンや具体的なアプローチをお勧めしますか?

+1

私が説明した方法でToDoList抽象化を追加します。抽象データ型とカプセル化を悪用するのは良いことです。それがOOのことです。 – duffymo

答えて

3

あなたのタスクリストが通常のリスト以上のことをしていない場合は、IMHOでList<Task>を作成することができます。

リストに特別なことをしたい場合は、すべてのタスクに完了マークを付けて、TaskListというクラスにList<Task>をカプセル化することができます。このようなもの:

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

タスクとタスクリストの関係はどうなっていますか?さて、そこに行くと、上記のように継承を使用することができます。私は一種の怠け者ので、私は希望などGetEnumerator

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

しかし、その後、あなたはAddのような多くのメソッドを実装する必要があり、Remove:別の方法として、あなたは次のようにクラスにList<Task>のプライベートインスタンスを格納することができます最初の方法に固執する。

+0

ありがとうございます。私はあなたの助言に従います。非常に役立ちます。 – dekrypto

+1

怠惰なプログラマは良いプログラマです。 –

2

@ Sweeperのコメントにはほとんど何も追加できませんが、「新しいクラスを作成する必要がありますか? "この潜在的なオブジェクトは物事を知っていて、物事を行う(例えば、データと方法の両方を持っている)のですか?"

例では、可能なTaskListメソッドはCompleteAllまたはShareです。これらを実装する場合は、TaskListクラスを作成してください。そうでない場合は、List<Task>を使用します。さらに、コレクションを扱うすべてのメソッドをIEnumerable<Task>またはICollection<Task>に依存するようにします。List<Task>で最初のバージョンを作成し、後でリファクタリングして、List As Sweeperから継承したTaskListを継承します。

私はdownvotesを取得している理由は、この問題は適切にプログラマではなく、SOに属していると思います。 SOは特定の問題を解決するためのものです。プログラマはオープンエンドなので、あなたのような質問がそこにあります。 https://softwareengineering.stackexchange.com/

+0

入手しました。ありがとうございました – dekrypto

関連する問題