Я проектирую библиотеку классов, которая будет использоваться следующим образом:
Engine eng = new Engine();
eng.AddPart(part).AddPart(otherPart).Run();
Проблема с классом заключается в том, что детали хранятся в движке, поэтому, если вы хотите Run
его с некоторыми другими деталями, вам нужно будет удалить те, которые вы уже добавили. Есть несколько возможных решений, но я не уверен, какое из них лучше.
1.
Игнорируйте это в библиотеке классов, пользователи будут вызывать new
каждый раз, когда им нужно отбросить старые детали.
2.
Автоматически сбрасывать детали, когда Run
называется
3.
Добавить Clear
метод
4.
Вместо возврата текущего объекта из метода AddPart
(return this
) верните новый экземпляр Engine
и не изменяйте текущий.
5.
Реализуйте IDisposable
, чтобы пользователь мог заключить его в оператор using, даже если нет ресурсов, которые необходимо утилизировать. Пользователи будут использовать это так:
Engine eng = new Engine();
using(eng)
{
eng.AddPart(part).Run();
}
Недостатком второго является то, что пользователям может понадобиться повторно использовать один и тот же и не ожидать, что части будут очищены. Третий вариант хорош, но пользователи могут забыть вызвать метод Clear
. Четвертый вариант выделит много экземпляров, а пятый не интуитивно понятен.
Есть предложения?