Я бы сказал, что это хорошая идея, когда добавление / удаление необходимо контролировать так, как вы предлагаете, например, для проверки бизнес-правил. В противном случае, как вы знаете из предыдущего кода, на самом деле нет способа гарантировать, что проверка будет выполнена.
Баланс, которого вы, вероятно, захотите достичь, - это когда делать это, а когда нет. Делать это для каждой коллекции каждого вида кажется излишним. Однако, если вы не сделаете это, а затем вам понадобится добавить код такого рода, то это будет серьезное изменение для класса, которое может быть или не быть головной болью в то время .
Я полагаю, что другой подход мог бы заключаться в том, чтобы иметь собственный потомок IList<T>
, который имеет общий код управления для своих методов Add()
и Remove()
, который уведомляет систему о том, что происходит. Что-то вроде экспонирования события, которое возникает перед тем, как вызывается внутренняя логика этих методов. Тогда класс Student
будет предоставлять делегата или что-то в этом роде (извините за расплывчатость, я сегодня очень закодирован) при создании экземпляра _courses
для применения бизнес-логики к событию и отмены операции (выбрасываю исключение, я думаю, ) если проверка бизнеса не удалась.
Это также может быть излишним, в зависимости от расположения разработчика. Но, по крайней мере, с помощью чего-то более сложного, подобного этому, вы получаете единую универсальную реализацию для всего с возможностью со временем добавлять / удалять бизнес-валидацию без необходимости вносить изменения.