<div id="reply-content">
Always so negative Paton why ?
</div>
<div id="F043CB3FAC56480BA2D70ECA0C50FA9D"><div><br></div>-- <br>Lee Chambers<br><div>Sent with <a href="http://www.sparrowmailapp.com/?sig">Sparrow</a></div><div><br></div></div>
<p style="color: #A0A0A8;">On Tuesday, 4 March 2014 at 22:02, chat-request@lists.lrug.org wrote:</p>
<blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
<div id="quoted-message-content"><div><div>Send Chat mailing list submissions to</div><div> chat@lists.lrug.org</div><div><br></div><div>To subscribe or unsubscribe via the World Wide Web, visit</div><div> http://lists.lrug.org/listinfo.cgi/chat-lrug.org</div><div>or, via email, send a message with subject or body 'help' to</div><div> chat-request@lists.lrug.org</div><div><br></div><div>You can reach the person managing the list at</div><div> chat-owner@lists.lrug.org</div><div><br></div><div>When replying, please edit your Subject line so it is more specific</div><div>than "Re: Contents of Chat digest..."</div><div><br></div><div><br></div><div>Today's Topics:</div><div><br></div><div> 1. [JOBS] London - Backend developer at Audioboo.fm</div><div> (Jonathan del Strother)</div><div> 2. Re: MySQL to Postgres (Matt Spendlove)</div><div> 3. Re: Startup Timeline (MG Lim)</div><div> 4. Re: Rails - The Missing Parts (Uro? Jurgli?)</div><div> 5. Re: Rails - The Missing Parts (Erich Kaderka)</div><div> 6. Re: Rails - The Missing Parts (Simon Coffey)</div><div><br></div><div><br></div><div>----------------------------------------------------------------------</div><div><br></div><div>Message: 1</div><div>Date: Tue, 4 Mar 2014 18:20:04 +0000</div><div>From: Jonathan del Strother <maillist@steelskies.com></div><div>To: London Ruby Users Group <chat@lists.lrug.org></div><div>Subject: [LRUG] [JOBS] London - Backend developer at Audioboo.fm</div><div>Message-ID:</div><div> <CAF5DW8+K+4mRs_vSqOhtrizAmcyhVxe_kkZ4nsPFp9_PxVLhew@mail.gmail.com></div><div>Content-Type: text/plain; charset=UTF-8</div><div><br></div><div>Hello - I work at Audioboo, where we're looking for a an experienced</div><div>backend engineer for a major expansion programme. Full job</div><div>description below - if you have any questions, you can direct them to</div><div>jon at audioboo.fm, or look me up on Twitter @jdelStrother.</div><div><br></div><div>-Jonathan</div><div>(PS - We're not looking for contact from recruiters right now, thanks)</div><div><br></div><div><br></div><div><br></div><div><br></div><div>Audioboo is a well established audio platform for major news</div><div>organisations, sports teams, broadcasters and audiobloggers worldwide.</div><div>With more than 2.3m registered users, over 1000 channels of pro</div><div>content, and 20 million listens a month, keeping on top of the sheer</div><div>volume of data and keeping our systems running smoothly is a serious</div><div>job.</div><div><br></div><div>Audioboo?s presence is based around a website (http://audioboo.fm),</div><div>the Audioboo app family, and an API which allows partners to integrate</div><div>items as needed.</div><div><br></div><div>Please note this is a heavily technical role - not a management or</div><div>front-end design role - and will be focused on:</div><div><br></div><div>- delivering excellent reliability and uptime, maintenance, and</div><div>improving daily operations</div><div>- expanding our capabilities based on management and application requirements</div><div>- delivering usage statistics and integrating statistics management systems</div><div>- supporting long-term objectives for ourselves and our major</div><div>commercial partners like the BBC, Guardian, Southern Cross Austereo</div><div>and dozens of other major broadcasters worldwide</div><div><br></div><div>**Required Skills/Experience**</div><div><br></div><div>- Ruby</div><div>- Linux administration</div><div>- MySQL administration and query optimization</div><div>- Storing & querying large amounts of stats</div><div>- Working with Amazon Web Services</div><div><br></div><div>**Desirable Skills/Experience**</div><div><br></div><div>- Network systems design and maintenance (server structure, load balancing, etc)</div><div>- System configuration management - eg Chef or Puppet</div><div>- SmartOS and/or Solaris administration</div><div>- Continuous integration & TDD</div><div>- Git</div><div>- Google Analytics API - custom coding will be required</div><div>- Payment systems (Stripe, SagePay)</div><div>- Microsoft Azure, particularly Blob Storage and server creation</div><div>- HTML5, Javascript, CSS3, HAML</div><div>- Flash</div><div><br></div><div><br></div><div><br></div><div>**Personal Profile**</div><div><br></div><div>You should be a dependable, self-starting individual prepared to take</div><div>on and own the safe and smooth running of the core structures.</div><div>You should be an excellent small-team player prepared to work together</div><div>with an expert CTO and the management team to enact rapid change and</div><div>expansion of the platform while keeping all core services running</div><div>smoothly and reliably.</div><div><br></div><div><br></div><div>------------------------------</div><div><br></div><div>Message: 2</div><div>Date: Tue, 4 Mar 2014 18:22:34 +0000</div><div>From: Matt Spendlove <matt@cenatus.org></div><div>To: Andrew Stewart <boss@airbladesoftware.com></div><div>Cc: LRUG Users Group <chat@lists.lrug.org></div><div>Subject: Re: [LRUG] MySQL to Postgres</div><div>Message-ID:</div><div> <CABO-r9z-yaj8G7m-y9r5N+LxrWRMc2SoQnWch4HTGzKJx2fZoQ@mail.gmail.com></div><div>Content-Type: text/plain; charset="iso-8859-1"</div><div><br></div><div>It was a while back but</div><div>mysql2psql<https://devcenter.heroku.com/articles/heroku-mysql>was</div><div>successful for me. We had a few tables in excess of 3M rows..</div><div><br></div><div> --</div><div>*Matt Spendlove - Cenatus*</div><div>458 Hackney Road, London E2 9EG</div><div>+44 (0)7976 609379</div><div>http://cenatus.org</div><div>http://netaudiolondon.org</div><div><br></div><div><br></div><div><br></div><div>On Tue, Mar 4, 2014 at 11:12 AM, Andrew Stewart</div><div><boss@airbladesoftware.com>wrote:</div><div><br></div><blockquote type="cite"><div><div>Hello LRUG,</div><div><br></div><div>What's the current best way to migrate data from MySQL to Postgres?</div><div> Everything I've found seems to be somewhat, er, "beta".</div><div><br></div><div>Thanks in advance,</div><div><br></div><div>Andy Stewart</div><div><br></div><div>_______________________________________________</div><div>Chat mailing list</div><div>Chat@lists.lrug.org</div><div>http://lists.lrug.org/listinfo.cgi/chat-lrug.org</div></div></blockquote><div>-------------- next part --------------</div><div>An HTML attachment was scrubbed...</div><div>URL: <http://lists.lrug.org/pipermail/chat-lrug.org/attachments/20140304/b22bb1ff/attachment.html></div><div><br></div><div>------------------------------</div><div><br></div><div>Message: 3</div><div>Date: Tue, 4 Mar 2014 19:53:50 +0000</div><div>From: MG Lim <mirageglobe@gmail.com></div><div>To: Oskar Pearson <oskar@deckle.co.uk></div><div>Cc: chat@lists.lrug.org</div><div>Subject: Re: [LRUG] Startup Timeline</div><div>Message-ID:</div><div> <CAD2douBD7ZDdK1u2rB6BydVnv4qTDCDbrYvFmWeTxUoK6ikM+g@mail.gmail.com></div><div>Content-Type: text/plain; charset="iso-8859-1"</div><div><br></div><div>Hi all,</div><div><br></div><div>thanks for your time, in-depth suggested background readings and sharing of</div><div>your experiences. It all boils down to an interesting journey at the end of</div><div>the day.</div><div><br></div><div>Will keep you posted with some updates, nicely wrapped with ruby questions;</div><div>somewhere down the path of between 5~10 years :). or 18 months if we r</div><div>lucky.</div><div><br></div><div>definitely appreciated all the ideas. cheers.</div><div>Jimmy</div><div><br></div><div><br></div><div>On 4 March 2014 09:58, Oskar Pearson <oskar@deckle.co.uk> wrote:</div><div><br></div><blockquote type="cite"><div><div>Hi Jimmy, All</div><div><br></div><blockquote type="cite"><div>I am curious about how things for how ideas move on.... -> panning out</div></blockquote><div>to projects -> gathering a team and finally to funding rounds?</div><blockquote type="cite"><div><div><br></div><div>More of a general discussion; but what have your experiences been; if</div></div></blockquote><div>you have been in that path or part of that path? "I wish I had done that in</div><div>the beginning" moments..</div><blockquote type="cite"><div><div><br></div><div>Marketing hells? Traction problems and in reality, the project took a</div></div></blockquote><div>good 3~5 years before media reported it as an overnight success.</div><blockquote type="cite"><div><div><br></div><div><br></div><div>PS: particularly with ruby-based frameworks / meteor styled frameworks;</div></div></blockquote><div>prototypes are quick to be churned out.</div><div><br></div><div>If you're interested in this stuff, I'd suggest having a look at the</div><div>news.ycombinator.com site, and Paul Graham's articles. London also has an</div><div>occasional hacker news meetup. http://www.meetup.com/HNLondon/</div><div><br></div><div>https://github.com/everpix/Everpix-Intelligence is relevant to the</div><div>funding and founding side of things. It's a dump of all the key VC and</div><div>other communications for their (failed) company, 2 years in.</div><div><br></div><div>Also probably relevant:</div><div> https://www.compass.co - their reports on key success factors are</div><div>pretty interesting</div><div><br></div><div>http://businessofsoftware.org/2013/02/gail-goodman-constant-contact-how-to-negotiate-the-long-slow-saas-ramp-of-death/</div><div><br></div><div><br></div><div>To quote the Everpix README:</div><blockquote type="cite"><div><div><br></div><div>Everpix was started in 2011 with the goal of solving the Photo Mess, an</div></div></blockquote><div>increasingly real pain point in people's life photo collections, through</div><div>ambitious engineering and user experience. Our startup was angel and VC</div><div>funded with $2.3M raised over its lifetime.</div><blockquote type="cite"><div><div><br></div><div>After 2 years of research and product development, and although having a</div></div></blockquote><div>very enthusiastic user base of early adopters combined with strong PR</div><div>momentum, we didn't succeed in raising our Series A in the highly</div><div>competitive VC funding market. Unable to continue operating our business,</div><div>we had to announce our upcoming shutdown on November 5th, 2013.</div><div>...</div><blockquote type="cite"><div>Here are some example of common startup questions this dataset helps</div></blockquote><div>answering:</div><blockquote type="cite"><div><div><br></div><div> * What are investment terms for consecutive convertible notes and</div></div></blockquote><div>an equity seed round? What does the end cap table look like? (see here)</div><blockquote type="cite"><div> * How does a Silicon Valley startup spend its raised money during</div></blockquote><div>2 years? (see here)</div><blockquote type="cite"><div><div> * What does a VC pitch deck look like? (see here)</div><div> * What kinds of reasons do VCs give when they pass? (see here)</div><div> * What are the open rate and click rate of transactional and</div></div></blockquote><div>marketing emails? (see here)</div><blockquote type="cite"><div> * What web traffic do various news websites generate? (see here</div></blockquote><div>and here)</div><blockquote type="cite"><div> * What are the conversion rate from product landing page to sign</div></blockquote><div>up for new visitors? (see here)</div><blockquote type="cite"><div> * How fast do people purchase a subscription after signing up to a</div></blockquote><div>freemium service? (see here and here)</div><blockquote type="cite"><div> * Which countries have higher suscription rates? (see here and</div></blockquote><div>here)</div><blockquote type="cite"><div> * What frustrates people the most abour their photo collection?</div></blockquote><div>(see here)</div><blockquote type="cite"><div><div> * Do people actually edit their digital photos? (see here)</div><div> * What would it take to acquire customers through online ads in</div></div></blockquote><div>such a business? (see here)</div><blockquote type="cite"><div> * How much price sensitive are consumers for such online services</div></blockquote><div>i.e. what's the price elasticity? (seehere)</div><blockquote type="cite"><div></div></blockquote><div><br></div><div><br></div><div>Oskar</div></div></blockquote><div><br></div><div><br></div><div><br></div><div><br></div><div>-- </div><div>Jimmy Mian-Guan Lim</div><div><br></div><div>Email - mirageglobe@gmail.com | Profile - www.mglim.com</div><div>Twitter - twitter.com/mirageglobe | LinkedIn -</div><div>uk.linkedin.com/in/mirageglobe</div><div><br></div><div>DracoTurtur <http://www.dracoturtur.com/> | Creative Web Engineering</div><div>-------------- next part --------------</div><div>An HTML attachment was scrubbed...</div><div>URL: <http://lists.lrug.org/pipermail/chat-lrug.org/attachments/20140304/df6f9d4d/attachment-0001.htm></div><div><br></div><div>------------------------------</div><div><br></div><div>Message: 4</div><div>Date: Tue, 4 Mar 2014 19:54:55 +0000</div><div>From: Uro? Jurgli? <jurglic@gmail.com></div><div>To: chat@lists.lrug.org</div><div>Subject: Re: [LRUG] Rails - The Missing Parts</div><div>Message-ID:</div><div> <CADistHgVqCS9uNah5RT_pfM7fC=WpJme5WxUw7v8NJ5kXHivaw@mail.gmail.com></div><div>Content-Type: text/plain; charset=ISO-8859-1</div><div><br></div><div>Great post Tom! I think most Rails devs that have spent time on a</div><div>multi-year project can relate to your findings. And probably most have</div><div>also come up with own solutions to organise the logic out of the</div><div>controllers and models...</div><div><br></div><div>Having seen many projects with the same issues, I feel it is a missed</div><div>opportunity for Rails not to level up and embrace conventions for</div><div>"enterprise" use - to handle the codebase growth. Let's face it, there</div><div>are more and more working rails application that are big, and they're</div><div>not getting any smaller...</div><div><br></div><div>Off course you can say this is not needed, because you can apply good</div><div>OO practices and cope with the growth... true. Too bad Rails is not</div><div>helping you. More, in a lot of places it seeds anti-patterns and bad</div><div>OO practices for which the price you pay later...</div><div><br></div><div>I think this kind of shift in direction would be well accepted and</div><div>similarly bold but right one as the merger with merb was.</div><div><br></div><div>Tell me I'm wrong :)</div><div><br></div><div><br></div><div>-- </div><div>Uros Jurglic | https://github.com/jurglic</div><div><br></div><div><br></div><div>------------------------------</div><div><br></div><div>Message: 5</div><div>Date: Tue, 4 Mar 2014 21:13:08 +0100</div><div>From: Erich Kaderka <erich.kaderka@gmail.com></div><div>To: Najaf Ali <ali@happybearsoftware.com></div><div>Cc: London Ruby Users Group <chat@lists.lrug.org></div><div>Subject: Re: [LRUG] Rails - The Missing Parts</div><div>Message-ID: <C181D0E3-5819-440D-BD30-40E2892323E6@gmail.com></div><div>Content-Type: text/plain; charset="windows-1252"</div><div><br></div><div>Hi Tom,</div><div><br></div><div>I enjoyed reading the article until this point: </div><div> private</div><div><br></div><div> def send_emails_for(grouper)</div><div> LeaderMailer.grouper_confirmed(member: grouper.leader.id).deliver</div><div> WingMailer.grouper_confirmed(wings: grouper.wings.map(&:id)).deliver</div><div> AdminMailer.grouper_confirmed(grouper: grouper.admin.id).deliver</div><div> end</div><div><br></div><div> def assign_bar_for(grouper)</div><div> # Asynchronous job because it?s a little slow</div><div> AssignBarForGrouper.enqueue(grouper.id)</div><div> end</div><div>You can't test this class in isolation (you need to require all 3 mailers and AssignBarForGrouper). Maybe it seems ok now, but if there is in future another email with simple logic, you end up mocking every hard coded dependency for different scenarios. Plus I don't like passing ids to mailers, then in your mailer class you need to query for email ... I would suggest make both private methods public and introduce new object for sending emails</div><div><br></div><div> def send_emails_for(confirm_grouper_mailer: ConfirmGrouperMailer.new(leader_email: grouper.leader.email, wings_emails: grouper.wings.collect(&:email), admin_email: grouper.admin_email)</div><div> confirm_grouper_mailer.deliver</div><div> end</div><div>I don't think you need to test successful interactor, this scenario should be covered by end-to-end test </div><div><br></div><div> context ?when the interactor is a success? do</div><div> let(:success) { true }</div><div><br></div><div> it { should redirect_to home_path }</div><div> end</div><div>The HN's discussion reminds of similar one here https://gist.github.com/justinko/2838490 </div><div><br></div><div>You can find DHH's opinions on architecture etc on Ruby Rogues episode 056 http://rubyrogues.com/056-rr-david-heinemeier-hansson/</div><div><br></div><div>Thank you for your article,</div><div><br></div><div>Erich</div><div><br></div><div><br></div><div>On 4 Mar 2014, at 15:36, Najaf Ali <ali@happybearsoftware.com> wrote:</div><div><br></div><blockquote type="cite"><div><blockquote type="cite"><div>Using modules to mix in behaviour is the same as inheritance and the composition over inheritance argument has already been had.</div></blockquote><div><br></div><div>I don't think I'm quite clever enough to follow the whole service objects vs. modules vs. objects vs. dependency injection debate, but this line in particular weakens your argument a little.</div><div><br></div><div>The composition over inheritance argument has indeed already been had: the primary reason that composition is better than inheritance is that inheritance needlessly couples type to implementation. Mixing in a module doesn't do that. There are other problems with modules (in particular when you have a lot of them, implicit dependencies can creep in between them) but "they are the same as inheritance therefore bad" strikes me as a little lazy.</div><div><br></div><div><br></div><div>On Tue, Mar 4, 2014 at 2:15 PM, Stephen Best <bestie@gmail.com> wrote:</div><div>@Riccardo Using decorators over extend gives you</div><div><br></div><div>* No method / instance variable naming collisions (counts for private methods too)</div><div>* Separate state</div><div>* Very obvious which decorations have been applied</div><div>* You can unwrap the decorators and get the original object back</div><div><br></div><div>The annoying this really is that the difference in effort is negligible yet the module approach is widely cargo-culted.</div><div><br></div><div>Using modules to mix in behaviour is the same as inheritance and the composition over inheritance argument has already been had.</div><div><br></div><div><br></div><div>On 4 March 2014 10:24, Riccardo Tacconi <rtacconi@gmail.com> wrote:</div><div>I created this project (very incomplete) to try few things and one was DCI: https://github.com/rtacconi/scriptrunner/blob/master/app/contexts/runner_on_project.rb. Yes I used 'extend' but it is 'expensive' and using mixins seems okay to me. What's the advantage of using decorators?</div><div><br></div><div><br></div><div>On 4 March 2014 09:37, Stephen Best <bestie@gmail.com> wrote:</div><div>Also why do Ruby developers insist on implementing DCI by mixing in modules at runtime? It's just completely unnecessary, why not decorate?</div><div><br></div><div><br></div><div>Stephen Best</div><div><br></div><div>+44 7745 790523</div><div>theaudaciouscodeexpiment.com</div><div>github.com/bestie</div><div>@thebestie</div><div><br></div><div><br></div><div>On 4 March 2014 09:35, Stephen Best <bestie@gmail.com> wrote:</div><div>DHH as usual saying the best way to design your objects is don't. GOOD LUCK WITH THAT.</div><div><br></div><div><br></div><div>Stephen Best</div><div><br></div><div>+44 7745 790523</div><div>theaudaciouscodeexpiment.com</div><div>github.com/bestie</div><div>@thebestie</div><div><br></div><div><br></div><div>On 3 March 2014 23:09, Mark Burns <markthedeveloper@gmail.com> wrote:</div><div>It's kind of similar, but DCI is kind of like a run-time only ActiveSupport::Concern.</div><div>It's still a big bag o' methods, but a big dynamic bag of methods. Maybe less chance of collisions, but</div><div>the principle is still the same as AS::Concern.</div><div>Interactors in the sense of the interactor gem are cleaner as you're not polluting a potentially already</div><div>overloaded domain model/persistence object hybrid.</div><div><br></div><div><br></div><div>On 3 March 2014 22:18, Riccardo Tacconi <rtacconi@gmail.com> wrote:</div><div>Hi Tom,</div><div><br></div><div>Your interactor reminds me the I part (interaction) of DCI, am I wrong? I see few similarities.</div><div><br></div><div><br></div><div>On 3 March 2014 20:38, Tom Blomfield <tomblomfield@gmail.com> wrote:</div><div>Hi all,</div><div><br></div><div>I wrote a blog post on Interactors in Rails - http://eng.joingrouper.com/blog/2014/03/03/rails-the-missing-parts-interactors</div><div><br></div><div>You might enjoy the discussion on HN, with DHH wading in https://news.ycombinator.com/item?id=7335211</div><div><br></div><div>Tom</div><div><br></div><div>_______________________________________________</div><div>Chat mailing list</div><div>Chat@lists.lrug.org</div><div>http://lists.lrug.org/listinfo.cgi/chat-lrug.org</div><div><br></div><div><br></div><div><br></div><div><br></div><div>-- </div><div>Riccardo Tacconi</div><div>Ruby on Rails and PHP development - System Administration</div><div>VIRTUELOGIC LIMITED</div><div><br></div><div>http://github.com/rtacconi</div><div>http://riccardotacconi.blogspot.com</div><div>http://twitter.com/rtacconi</div><div><br></div><div>_______________________________________________</div><div>Chat mailing list</div><div>Chat@lists.lrug.org</div><div>http://lists.lrug.org/listinfo.cgi/chat-lrug.org</div><div><br></div><div><br></div><div><br></div><div>_______________________________________________</div><div>Chat mailing list</div><div>Chat@lists.lrug.org</div><div>http://lists.lrug.org/listinfo.cgi/chat-lrug.org</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div>-- </div><div>Riccardo Tacconi</div><div>Ruby on Rails and PHP development - System Administration</div><div>VIRTUELOGIC LIMITED</div><div><br></div><div>http://github.com/rtacconi</div><div>http://riccardotacconi.blogspot.com</div><div>http://twitter.com/rtacconi</div><div><br></div><div><br></div><div>_______________________________________________</div><div>Chat mailing list</div><div>Chat@lists.lrug.org</div><div>http://lists.lrug.org/listinfo.cgi/chat-lrug.org</div><div><br></div><div><br></div><div>_______________________________________________</div><div>Chat mailing list</div><div>Chat@lists.lrug.org</div><div>http://lists.lrug.org/listinfo.cgi/chat-lrug.org</div></div></blockquote><div><br></div><div>-------------- next part --------------</div><div>An HTML attachment was scrubbed...</div><div>URL: <http://lists.lrug.org/pipermail/chat-lrug.org/attachments/20140304/e9cbf8f1/attachment-0001.htm></div><div><br></div><div>------------------------------</div><div><br></div><div>Message: 6</div><div>Date: Tue, 4 Mar 2014 21:21:40 +0000</div><div>From: Simon Coffey <simon@tribesports.com></div><div>To: Tom Blomfield <tomblomfield@gmail.com></div><div>Cc: London Ruby Users Group <chat@lists.lrug.org></div><div>Subject: Re: [LRUG] Rails - The Missing Parts</div><div>Message-ID:</div><div> <CAAK-=xhmyLmnvjZCcxRHUNpPEQoT=YvFoKtRXudiRt5FA0Av=A@mail.gmail.com></div><div>Content-Type: text/plain; charset=UTF-8</div><div><br></div><div>On 3 March 2014 20:38, Tom Blomfield <tomblomfield@gmail.com> wrote:</div><blockquote type="cite"><div><div><br></div><div>I wrote a blog post on Interactors in Rails -</div><div>http://eng.joingrouper.com/blog/2014/03/03/rails-the-missing-parts-interactors</div></div></blockquote><div><br></div><div>Nice article, thanks for sharing!</div><div><br></div><div>To play devil's advocate, though: despite using them myself, I'm a bit</div><div>unsure about service objects/interactors/use cases.</div><div><br></div><div>We've got a fair few of them in our main app for things like user</div><div>registration and so forth. While they've cleaned up our controllers</div><div>somewhat, get a modest amount of reuse and are manifestly superior to</div><div>AR lifecycle callbacks, I can never escape the feeling that they're</div><div>still a bit of a junk drawer. ("Yeah, but what have you done for me</div><div>*lately*?")</div><div><br></div><div>Misgivings:</div><div><br></div><div>* non-SRP: creating DB records, sending emails, firing background jobs</div><div>* corollary: they tend to have a whole bunch of dependencies</div><div>* corollorollary: testing them is still a pain (even with DI)</div><div>* what actually *is* a UserRegistrationService instance[1]?</div><div>* why do I have a whole class with a single public "run" method?</div><div><br></div><div>It often feels like they're little more than high-ceremony functions.</div><div>With Interactors there's a bit of success/failure state being</div><div>maintained, but it doesn't seem to do anything that raising exceptions</div><div>wouldn't (less, really, if you've got to handle multiple failure</div><div>modes).</div><div><br></div><div>We've extracted genuine cross-cutting concerns into a pub-sub event</div><div>system[2], so things like email delivery are properly isolated, but</div><div>there's still a gunky residue, which is why we've still got service</div><div>objects.</div><div><br></div><div>So what is that residue? In our codebase it's often things that would</div><div>live in a model constructor if Rails allowed you to define</div><div>constructors for your models. But the pattern isn't consistent enough</div><div>that I can just say, "okay, this gunk compensates for Rails," which</div><div>makes me feel like service objects are still a failure of design</div><div>somehow, but I can't put my finger on what's missing.</div><div><br></div><div>Anyone else share these doubts, or am I just making up problems for myself?</div><div><br></div><div>Cheers,</div><div>Simon</div><div><br></div><div>[1] A ranty version of this objection:</div><div>http://me.veekun.com/blog/2013/03/03/the-controller-pattern-is-awful-and-other-oo-heresy/</div><div>[2] atrocious blogspam, sorry:</div><div>http://techblog.tribesports.com/blog/2012/08/21/pub-sub-system-events-for-post-action-tasks/</div><div><br></div><div><br></div><div>------------------------------</div><div><br></div><div>_______________________________________________</div><div>Chat mailing list</div><div>Chat@lists.lrug.org</div><div>http://lists.lrug.org/listinfo.cgi/chat-lrug.org</div><div><br></div><div><br></div><div>End of Chat Digest, Vol 98, Issue 5</div><div>***********************************</div></div></div>
</blockquote>
<div>
<br>
</div>