DesignPatternsBook icon indicating copy to clipboard operation
DesignPatternsBook copied to clipboard

[Part2,Ch0] SRP

Open EvgenyChepurnykh opened this issue 10 years ago • 10 comments

Не уверен, что Мартиновское определение SRP самое удачное. Либо его нужно давать в контексте. Принцип единой обязанности (SRP - The Single Responsibility Principle: у класса/модуля должна быть лишь одна причина для изменения. Одна причина для изменения - это как? В контексте Мартина - класс делает то и то, должна быть только одна причина для изменения. Понятно. А если - только одна причина для изменения - какая причина? Я понимаю о чем ты пишешь, все правильно. Но ты уверен, что человек без Мартиновского бэкграунда поймет о чем ты? Тем более - он открывает wiki и читает - что SRP - In object-oriented programming, the single responsibility principle states that every context (class, function, variable, etc.) should define a single responsibility, and that responsibility should be entirely encapsulated by the context. Лишь одна причина для изменения == одной ответственности? Я просто предлагаю подумать :)

EvgenyChepurnykh avatar Nov 19 '14 15:11 EvgenyChepurnykh

Жень, тут мне нужно дать распространенное определение, просто для затравки. Основные рассуждения идут в соответствующей главе. Там у этих принципов есть общепринятое краткое определение. Если у тебя есть под рукой другое короткое определение, то я готов его взять.

SergeyTeplyakov avatar Nov 23 '14 04:11 SergeyTeplyakov

Я предлагаю сделать определение как в Wiki. А в главе по SRP - дать уже твое определение, будучи в контексте.

EvgenyChepurnykh avatar Nov 23 '14 08:11 EvgenyChepurnykh

Я не вижу короткого определения в вики. У тебя есть на примете короткий вариант?

SergeyTeplyakov avatar Nov 23 '14 08:11 SergeyTeplyakov

SRP - In object-oriented programming, the single responsibility principle states that every context (class, function, variable, etc.) should define a single responsibility, and that responsibility should be entirely encapsulated by the context. У класса должна быть только одна ответственность. Это всем понятно. Более того, именно так я и слышу от коллег.

EvgenyChepurnykh avatar Nov 23 '14 18:11 EvgenyChepurnykh

Жень, смотри. У всех принципов есть короткое и длинное определение. Здесь речь идет о 0-й главе, а значит тут должно быть короткое определение. Приведенное тобой - это уже длинное.

Я глянул в книге Мартина, у него во вступлении точно также дается именно это короткое определение, а уже "нормальное" дается в соответствующей главе. Твой вариант - это уже описание.

Вот еще один пруф оригинальности: Вот здесь у Мартина (http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod) дается именно вот это короткое определение, в котором говорится про одну причину для изменения.

SergeyTeplyakov avatar Nov 23 '14 18:11 SergeyTeplyakov

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

SergeyTeplyakov avatar Nov 23 '14 18:11 SergeyTeplyakov

"У класса должна быть только одна ответственность". Это определение используется везде. Везде, где я его слышал. Попробуй поспрашивать у своих ребят. Серьезно, определение про причину видел только у Мартина и у тебя. https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B5%D0%B4%D0%B8%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BE%D0%B1%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8. Первый абзац. Дальше уже про Мартина, но ты понимаешь, кто у нас читает до конца :)

EvgenyChepurnykh avatar Nov 23 '14 19:11 EvgenyChepurnykh

Мне честно этот вариант нравится больше. Но я не люблю, когда эволюция в описании принципов заходит так далеко, что теряются исходные корни. Хороший пример - OCP, который дядюшка Боб исковеркал настолько сильно, что исходный смысл, который закладывал в него Мейер полностью пропал.

Давай держать этот тикет открытым. Об этом точно стоит подумать.. Просто у меня нет однозначного мнения здесь. У каждого варианта есть свои плюсы и минусы.

SergeyTeplyakov avatar Nov 23 '14 19:11 SergeyTeplyakov

Я тебе предлагаю такой вариант, сделать опрос на rsdn - какой вариант лучше. Может быть я тоже не объективен. Я тебе это рассказал, потому что вокруг меня говорят о SRP только так. Думаю, что объективное мнение будет наилучшим в данном случае. Ну и вариант с ответственностью мне ближе :). Когда говорим про причины, особенно для не очень опытных - тут поле для возможностей. Причины - длинный файл, слабая связность, код стандарт etc... О какой причине речь?

EvgenyChepurnykh avatar Nov 23 '14 19:11 EvgenyChepurnykh

Тут лучше будет у всех разное:)) Мне лучше твой вариант, то здесь важна и историческая составляющая. Которая для меня важна, а для кого-то совсем нет.

Ну и в основной статье ведь вопрос "изменений" раскрыт. А введение - оно на то и введение, что в нем говорится о некоторых вещах, без полного объяснения.

Так что, если есть вопросы с этим определением в основной главе - то нужно править. А то мы тут завязались за введение, которое просматривается по диагонали и смысл которого дать минимальную вводную и показать, о чем вообще будет идти речь и все.

SergeyTeplyakov avatar Nov 23 '14 19:11 SergeyTeplyakov