Как избежать нарушения SRP при преобразовании данных - PullRequest
2 голосов
/ 24 января 2011

Как я могу избежать нарушения "принципа единой ответственности" при написании класса, который должен преобразовывать данные из формата A в формат B?Существует ровно две причины для изменения такого класса, потому что спецификации обоих форматов A и B. могут измениться.

1 Ответ

3 голосов
/ 24 января 2011

Итак, я новичок здесь, и отправлю это с оговоркой, которую я растягиваю, предлагая свой ответ.

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

  1. В самых строгих терминах, если один из форматов изменится, теоретически вам все равно понадобится предыдущая версия конвертера форматов для преобразования устаревших данных (обратная совместимость).Вы никогда не знаете, когда кто-то может не получить памятку об изменении форматов.Или вы можете наткнуться на партию данных в формате A v1 в подвале.Следовательно, единственной обязанностью вашего класса будет преобразование данных из формата A1.0 в формат b1.0.

  2. Если одна из спецификаций изменится, теперь вам нужно создать новую ВЕРСИЮ вашего класса, верно?Допустим, кто-то изменяет спецификацию для формата A. Теперь вам нужен класс, который управляет преобразованием данных из формата A1.1 в B1.0.Вы создали новый класс с единственной ответственностью.

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

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

Последний пример на иллюстрации.Предположим, что ответственность моего класса состоит в том, чтобы преобразовать определенный оттенок красного в особый оттенок розового.Затем однажды дизайнер шеф-поваров решает, что ему нужен более яркий розовый цвет, одна сторона моей спецификации изменилась, но ответственность моего класса не изменилась.На следующий день на самом высоком корпоративном уровне было решено, что новый красный стандарт больше похож на бордовый.Теперь моя спецификация ввода изменилась, но ответственность моего класса - нет.Я мог бы решить создать новый класс и сохранить версию 1.0 для удержаний, или я мог бы просто обновить существующую версию.В любом случае, класс по-прежнему несет единственную ответственность;отображение красной спецификации на розовую спецификацию.

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