2009-04-02 2 views
5

SRP (PDF версия; HTML версия) утверждает, чтоКогда вы нарушаете SRP (принцип единственной неопровержимости)?

Там никогда не должно быть более чем одна причина для класса, чтобы изменить

Когда вы посмотрите на Outlook, окно Календарь событий , у него есть «Сохранить и Закрыть».

alt text

Так что, когда функциональные один или оба Сохранить или Закрыть изменения, что кнопка должна измениться. Очевидно, это нарушает SRP.

Эта функция экономит время и удобство, так как большинство пользователей ожидает, когда они сохраняют назначение в календаре.

Но теперь, мой вопрос, когда еще вы нарушаете SRP кроме того, когда функция должна быть в Outlook, Полезными?

+0

Что? Как изменяется кнопка при изменении Сохранить или Закрыть? Какой класс, по вашему мнению, реализует «Сохранить и закрыть»? Как изменение этих функций влияет на кнопку? –

+0

То, что я подразумевал под «изменением», было то, что, когда основная реализация изменений «сохранить» или «закрыть»; Не когда пользовательский интерфейс кнопки должен измениться. – Sung

+0

Плохой пример. Функция с кодом кнопки имеет _sequence_ из двух действий: «Сохранить()» и «Закрыть()». Это ничего не нарушает. Любая функция может быть последовательностью, итерацией или выбором. –

ответ

19

SRP не применяется к пользовательским интерфейсам. Имейте в виду, что даже если кнопка называется «Сохранить и закрыть», для управления функциями сохранения и закрытия могут быть, без сомнения, два отдельных метода или типа. Кнопка просто связывает эти две отдельные части функциональности вместе.

Если вы чувствуете необходимость нарушать SRP, вам необходимо переоценить ваш подход. Любое нарушение SRP может быть реорганизовано в новый метод или тип, который предоставляет составную функциональность посредством композиции из двух частей.

+1

Собственно, это относится и к пользовательскому интерфейсу. Но в этом примере демонстрируется пользовательский интерфейс, который реализуется некоторыми элементами управления и/или модели под капотом. Вопрос связывает изменения пользовательского интерфейса с изменениями Model/Control; что не имеет особого смысла - каждый из них был построен после SRP. –

+0

Да, я согласен с вами. После повторного чтения моего первого предложения я понял, что я, по сути, неверен. Думаю, я оставлю его там, так как ваш комментарий не будет иметь большого смысла, если я его удалю. Я ценю ваш резкий комментарий, и я не хочу, чтобы он появился вне контекста.:) –

+0

@ Андрю: По вашему мнению, вы имеете в виду, что SRP никогда не должен (да, плохой выбор слова) быть нарушенным, и если он должен быть нарушен, структура кода должна измениться вместо этого? – Sung