Нарушен или нет принцип единой ответственности

У меня есть класс, который добавляет некоторые функции в текстовое поле формы Windows. Например, он обрабатывает событие нажатия клавиши текстового поля и на основе некоторой логики, если была нажата клавиша «Ввод», отображается специальная сетка, позволяющая пользователю выбрать один объект из большого количества объектов. Поэтому я называю этот класс «расширителем текстового поля», а текстовое поле «расширенным».

Теперь я хочу, чтобы пользователь был проинформирован о том, что независимо от того, расширяется ли текстовое поле путем изменения его заднего цвета, довольно легко добавить эту функциональность в класс, НО: я очень подозреваю, что это противоречит принципу единой ответственности. Любая идея высоко ценится.


person Alireza    schedule 13.06.2013    source источник


Ответы (2)


Это не против ссср. Ответственность вашего класса заключается в расширении функциональности текстового поля.

person athabaska    schedule 13.06.2013
comment
Но теперь у него две обязанности: расширение текстового поля, изменение цвета фона. Возможно завтра поменяю шрифт. Еще день меняем передний цвет. Какова ваша идея? - person Alireza; 13.06.2013
comment
Ха! Затем подумайте об обычном текстовом поле - у него есть МИЛЛИОНЫ обязанностей: обрабатывать нажатие кнопки, печатать символ, обрабатывать нажатие кнопки b, печатать b char и т. д. - person athabaska; 13.06.2013
comment
Я думаю, что в вашем случае вы можете шире взглянуть на то, что такое ответственность. Кроме того, в конце концов вам нужно работающее приложение, а не приложение, удовлетворяющее всем правилам правильной разработки, но не работающее. - person athabaska; 13.06.2013
comment
Отличный пример. Теперь я в этом убедился. Спасибо. - person Alireza; 13.06.2013
comment
На самом деле одержимое следование правилам позволило мне разработать работающее и в то же время удобное в сопровождении приложение. Работающее приложение не так уж сложно создать в наши дни, но подумайте о поддержке кода. - person Alireza; 13.06.2013
comment
Что ж, правила должны работать хотя бы для некоторых людей 8) Я имел в виду, что процесс разделения классов по ssr может заходить глубоко, буквально до бесконечности и дальше. - person athabaska; 13.06.2013

Принцип единой ответственности гласит, что ваш класс должен выполнять только одну цель. Какова цель вашего класса? Я бы сказал, что это показать расширенное текстовое поле (и получить его данные, которые вы не можете сделать где-то еще), если ваши изменения пользовательского интерфейса информируют вашего пользователя о том, что теперь у них есть расширенное текстовое поле, с этим все в порядке, никаких нарушений СРП. В любом случае, капсулирование пользовательского интерфейса из объекта пользовательского интерфейса кажется чрезмерной инженерией.

person Master117    schedule 13.06.2013
comment
Что вы подразумеваете под «В любом случае капсулирование пользовательского интерфейса из объекта пользовательского интерфейса кажется чрезмерным проектированием». В классе расширителя ничего не инкапсулировано. - person Alireza; 13.06.2013
comment
вы хотели изменить свой пользовательский интерфейс, теперь, если он будет против srp, это будет означать, что вам придется поместить его в другой класс. И изменение пользовательского интерфейса вашего текстового поля из другого класса, а не самого себя, кажется бесполезной работой. - person Master117; 13.06.2013