DesignPatternsBook
DesignPatternsBook copied to clipboard
[Part2,Ch0] SRP
Не уверен, что Мартиновское определение 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. Лишь одна причина для изменения == одной ответственности? Я просто предлагаю подумать :)
Жень, тут мне нужно дать распространенное определение, просто для затравки. Основные рассуждения идут в соответствующей главе. Там у этих принципов есть общепринятое краткое определение. Если у тебя есть под рукой другое короткое определение, то я готов его взять.
Я предлагаю сделать определение как в Wiki. А в главе по SRP - дать уже твое определение, будучи в контексте.
Я не вижу короткого определения в вики. У тебя есть на примете короткий вариант?
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. У класса должна быть только одна ответственность. Это всем понятно. Более того, именно так я и слышу от коллег.
Жень, смотри. У всех принципов есть короткое и длинное определение. Здесь речь идет о 0-й главе, а значит тут должно быть короткое определение. Приведенное тобой - это уже длинное.
Я глянул в книге Мартина, у него во вступлении точно также дается именно это короткое определение, а уже "нормальное" дается в соответствующей главе. Твой вариант - это уже описание.
Вот еще один пруф оригинальности: Вот здесь у Мартина (http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod) дается именно вот это короткое определение, в котором говорится про одну причину для изменения.
Да, для ясности моей точки зрения: мне совершенно и абсолютно не нравится вот это короткое определение. Но именно оно является оригинальным коротким определением принципа, описанное его автором.
"У класса должна быть только одна ответственность". Это определение используется везде. Везде, где я его слышал. Попробуй поспрашивать у своих ребят. Серьезно, определение про причину видел только у Мартина и у тебя. 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. Первый абзац. Дальше уже про Мартина, но ты понимаешь, кто у нас читает до конца :)
Мне честно этот вариант нравится больше. Но я не люблю, когда эволюция в описании принципов заходит так далеко, что теряются исходные корни. Хороший пример - OCP, который дядюшка Боб исковеркал настолько сильно, что исходный смысл, который закладывал в него Мейер полностью пропал.
Давай держать этот тикет открытым. Об этом точно стоит подумать.. Просто у меня нет однозначного мнения здесь. У каждого варианта есть свои плюсы и минусы.
Я тебе предлагаю такой вариант, сделать опрос на rsdn - какой вариант лучше. Может быть я тоже не объективен. Я тебе это рассказал, потому что вокруг меня говорят о SRP только так. Думаю, что объективное мнение будет наилучшим в данном случае. Ну и вариант с ответственностью мне ближе :). Когда говорим про причины, особенно для не очень опытных - тут поле для возможностей. Причины - длинный файл, слабая связность, код стандарт etc... О какой причине речь?
Тут лучше будет у всех разное:)) Мне лучше твой вариант, то здесь важна и историческая составляющая. Которая для меня важна, а для кого-то совсем нет.
Ну и в основной статье ведь вопрос "изменений" раскрыт. А введение - оно на то и введение, что в нем говорится о некоторых вещах, без полного объяснения.
Так что, если есть вопросы с этим определением в основной главе - то нужно править. А то мы тут завязались за введение, которое просматривается по диагонали и смысл которого дать минимальную вводную и показать, о чем вообще будет идти речь и все.