タスクのリストである不変のデータ構造を作成しようとしています。各タスクにリストへの参照を持たせたいと思います。リストはすべてのタスクを返し、現在のタスク プロパティを持ちます。
問題は、タスクからリストへ、およびリストからタスクへの循環参照を行い、データ構造を不変にする方法です。
最初にタスクを作成すると、リストがまだ存在しないため、リストを参照できません。逆の場合は、最初にリストを作成して、タスクを追加するためにリストを変更する必要があります。
ありがとう、イド。
タスクのリストである不変のデータ構造を作成しようとしています。各タスクにリストへの参照を持たせたいと思います。リストはすべてのタスクを返し、現在のタスク プロパティを持ちます。
問題は、タスクからリストへ、およびリストからタスクへの循環参照を行い、データ構造を不変にする方法です。
最初にタスクを作成すると、リストがまだ存在しないため、リストを参照できません。逆の場合は、最初にリストを作成して、タスクを追加するためにリストを変更する必要があります。
ありがとう、イド。
リストをパラメーターとして渡しながら、リストを作成し、コンストラクターでリスト項目を作成できると確信しています。
擬似コード:
List constructor:
List()
{
for each item to add
add(new Item(this));
}
Item constructor:
Item(List list)
{
this.list = list;
}
ただし、リストコンストラクターはアイテムを作成するためにすべてのロジックを処理する必要があるため、これは一種のモジュール性を壊します。
リストとタスクの両方を同時に作成することはできないため、一方を先に作成する必要があります。ある時点で、空のリストから始めます (たとえば、リストのコンストラクターまたは他の場所で)。
空のリストを指定して、タスクを作成します。たとえば、リストのコンストラクターまたはリスト内のメソッドです。リストへの参照をタスクのコンストラクターに渡すことができます。次に、タスクをリストに追加すると、リストにはタスクへの参照が含まれます。