Каков лучший шаблон дизайна для этой проблемы? - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть класс, который имеет несколько свойств.Некоторые свойства могут быть изменены другими классами, но некоторые свойства зависят от других свойств.Например, предположим, что у моего класса есть три свойства: A, B и C. A и B могут быть изменены другими классами в системе, а C равно A + B. Класс генерирует уведомление об изменении свойства. Поэтому я хочу, чтобы A или B изменилисьуведомление генерируется как для измененного свойства (A или B), так и уведомление генерируется также для C.У меня есть три варианта (любой другой?)

1- Создайте обычное свойство C (с резервным полем) и добавьте код в установщик A и B, чтобы изменить C.

2- Создайтеобычное свойство C и прослушивание уведомления об изменении свойства моего класса внутри моего класса и изменение C при изменении A или B.

3- Создайте вычисляемое свойство для C, но нет, а получатель - A + B, в установщикеиз A (и B), я запускаю изменение свойства для A (или B) и C.

Какой из них является лучшим шаблоном дизайна (в C #)?Мне лично нравится дизайн № 2.

Ответы [ 4 ]

1 голос
/ 21 сентября 2011

Похоже, что шаблон Observer может быть полезным здесь. См., Например, http://www.oodesign.com/observer-pattern.html. Хотя поиск по шаблону Observer даст много результатов и других примеров, некоторые из которых будут намного проще и зависят от языка.

0 голосов
/ 21 сентября 2011

2 является самым чистым, поскольку он разделяет A, B и C, но он включает в себя небольшую часть служебной информации при разборе строки в уведомлении свойства.

Если бы это был простой набор свойств, я бы соблазнился с 1, так как они все еще достаточно разделены, но обновление намного проще. 3 является худшим IMO, поскольку A + B являются реплицирующим кодом, который в любом случае должен быть отдельным (уведомления C).

0 голосов
/ 21 сентября 2011

Проблема здесь в том, что вы пытаетесь смешать то, как все должно быть сделано, и то, как Microsoft заставляет вас это делать ...:)

Но мои разговоры в стороне от этого, я думаю, что вариант 3 звучит наиболее чисто. Конечно, не 1, это худший на сегодняшний день, и я думаю, что подписка на ваши собственные события изменения свойств может привести к некоторым причудливым проблемам, которые трудно будет отладить, когда какой-то плохой сок попытается сохранить код в будущем ...

Если вы думаете об этом на высоком уровне, то, что вы предлагаете в 3, прекрасно описывает то, что происходит в классе:

Каждый раз, когда свойство A изменяется, наблюдатели класса должны быть уведомлены о том, что свойство C также изменилось (потому что оно изменилось).

0 голосов
/ 21 сентября 2011

Я бы, вероятно, пошел с вариациями на 2 и 3.

У вас может быть вычисленное свойство (только для получателя) для C, чтобы вычисление C = A + B было только в одном месте.

Затем, согласно вашему варианту 2, вы можете прослушивать события изменения свойств в одном и том же классе ... но вместо обновления C при обнаружении события PropertyChanged для A и B вам нужно только вызвать событие PropertyChangedдля C в то время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...