Когда мы используем объекты мы обычно приходим к объектному графу. Со временем у нас появляется несколько объектов которые взаимодействуют друг с другом. Когда один объект содержит другой мы говорим про связь Has-a. Предназначение этой связи может быть разное, один объект может просто ссылаться а может и делегировать ряд задач какому-то другому объекту.
Давайте представим что у нас есть система задач. Пользователь может создавать списки задачи, а внутри списков размещать сами задачи. К каждой задаче можно прикрепить текст задачи и пользователя который ей занят.
Мы можем очень эффектно выразить это с помощью следующих классов:
- User
- List
- Task
Вот как они выглядят
Фрагмент 1.43
class User
{
public string Name;
public User(string name)
{
Name = name;
}
}
class List
{
public Task[] Tasks;
public List(Task[] tasks)
{
Tasks = tasks;
}
}
class Task
{
public User Worker;
public string Description;
public Task(User worker, string description)
{
Worker = worker;
Description = description;
}
}
Это не один возможный способ организации подобного примера. Текущая композиция например позволяет задаче быть на нескольких досках сразу. Мы можем это исправить убрав ссылку на задачу из листа и сделав ссылку на лист в задаче.
С организацией и дизайном кода можно играться очень долго исходя из задачи.