Я сделал этот / используемый код, который делал это раньше, и не заметил больших побочных эффектов в коде. В зависимости от количества свойств вы можете увидеть снижение производительности, но, вероятно, оно будет незначительным. Что я заметил, так это то, что не всегда сразу понятно при взгляде на код, почему происходят эффекты, когда вы используете этот шаблон. Что вы должны быть осторожны, так это то, как вы проектируете свои классы. Автоматические свойства хороши, когда вы собираете класс быстро, но они могут стать помехой для всего вашего дизайна. Я обычно не использую их, если это не быстрый макет объекта или очень простой объект, который я использую для передачи данных. Вопрос, который вы должны задать себе, заключается в том, проектируете ли вы свой объект таким образом, потому что он лучше всего подходит для вашего кода, программы, стиля или потому что вы пытаетесь использовать определенную функцию, то есть автоматические свойства.
Одна вещь, на которую стоит обратить внимание, это то, собираетесь ли вы выполнять одно и то же действие для каждого поля, или у вас будут разные действия? Если у вас разные действия, вы быстро получаете громоздкий метод. Если это одни и те же действия, им, вероятно, легче управлять.
Обычный способ реализации интерфейса INotifyProperty
состоит в создании метода, который изменяет поле, выполняет уведомление, а также может выполнить Action
для выполнения после внесения изменения. Это позволяет избежать всех больших условных операторов и дает точный контроль зерна над действиями, но имеет достаточно точный контроль зерна, чтобы быть полностью гибким. Если я создаю много связанных между собой объектов, я обычно просто создаю базовый класс для наследования всех из них, у которого есть этот метод изменения как защищенный метод, поэтому мне не нужно повторно реализовывать шаблон один раз за класс.