Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.programming > #6302
| From | Richard Heathfield <rjh@cpax.org.uk> |
|---|---|
| Newsgroups | comp.programming |
| Subject | Re: Thoughts on the Single Responsibility Principle. |
| Date | 2016-03-07 14:49 +0000 |
| Organization | A noiseless patient Spider |
| Message-ID | <nbk48m$93m$1@dont-email.me> (permalink) |
| References | <nbivme$j6j$1@dont-email.me> |
On 07/03/16 04:25, Daniel Pitts wrote: <snip> > I'd even say that statements (in imperative languages) should also have > one responsibility. This means statements such as "foo = ++bar;" are > breaking the SRP, as the statement is responsible for incrementing bar > *and* copying the result to foo. > > Maybe what I'm saying here is so self-evident that I shouldn't have > brought it up, or maybe what I'm saying is just plain wrong, or even > oversimplified. I'd like feedback. I think the SRP is just plain wrong. Please bear with me while I paint a picture. (A picture is not proof! But it can illustrate a truth, if we're careful.) I hope we can all agree that putting the entire program into a single function is a mistake, for all but the very simplest of programs. Let's say that we have a million things to do, and that each thing takes one line. The function would be a million lines long, which is ludicrous. We can think of this as being a very tall, very narrow program. Okay, so let's go the other way. Let's have a million functions instead. We now have a very short, very wide program. And it's just as ridiculous. But we can make a lot more sense of the program if it has, say, a thousand functions, each a thousand lines long. Now the program is still quite tall, but not unmanageably so. And it's still quite wide, but not unmanageably so. That's my picture. Now for my argument. So you can stop bearing with me now. :-) If we had a Single Responsibility /Strategy/, I could live with that. Let's try to make each function do one small job and do it well, but let's accept that there will be times when it makes more sense for the function to do a bigger job, because it makes some /other/ job simpler. But a Single Responsibility /Principle/ brooks no argument. We cannot say, with Groucho Marx, "these are my principles, and if you don't like them... well, I have others". We must stick to our principles, right? And if we don't stick to them, our code will fail the review. And so we have /no choice/ but to go with the very short, very wide program. Every function will be a one-liner. Every function must take only one parameter. Every function must return only one value. Banish the IF! It's ridiculous. It leads sensible, thoughtful people to wonder whether we should turn foo = ++bar; into foo = bar + 1; ++bar; It will turn short functions into long functions, and then it will insist that those long functions be turned into two or more shorter functions, and we end up with a million one-line functions. NO, sir! I will cheerfully accept that a Single Responsibility Strategy can help to make maintenance easier when it is applied as /one/ of a number of tools for writing better software. But I cannot accept it as a principle. These, ladies and gentlemen, are my strategies, and if /I/ don't want to go where they lead, I have /other/ strategies. It isn't a great one-liner, is it? But that's kind of the point. I'd rather have a thousand great one-thousand-liners than a million great one-liners. -- Richard Heathfield Email: rjh at cpax dot org dot uk "Usenet is a strange place" - dmr 29 July 1999 Sig line 4 vacant - apply within
Back to comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Thoughts on the Single Responsibility Principle. Daniel Pitts <usenet@coloraura.com> - 2016-03-06 20:25 -0800
Re: Thoughts on the Single Responsibility Principle. "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2016-03-07 09:23 +0100
Re: Thoughts on the Single Responsibility Principle. Richard Heathfield <rjh@cpax.org.uk> - 2016-03-07 14:49 +0000
Re: Thoughts on the Single Responsibility Principle. Julio Di Egidio <julio@diegidio.name> - 2016-03-07 08:58 -0800
Re: Thoughts on the Single Responsibility Principle. Jos V <xjosx@xjosaphatx.co> - 2016-03-09 00:30 -0500
Re: Thoughts on the Single Responsibility Principle. Julio Di Egidio <julio@diegidio.name> - 2016-03-09 06:48 -0800
csiph-web