refactoring - Ruby: Improve complex initialize method -


i have piece of ruby code boils down this:

class foo   attr_reader :a, :b, :c   def initialize     build_a     build_b     build_c   end    private    def build_a     # complex results in @a =   end   def build_b     # complex results in @b =   end   def build_c     # complex results in @c =   end end 

calling build_* in initialize method seems bit superfluous. there better way write this? of course i'm aware of lazy loading pattern:

class   def     @a ||= something_complex   end end 

but, need code thread safe, can't use pattern here.

edit: main concern code, see fact build_a should called after initialisation, written @ definition of build_a instead of in initialize method.

those callbacks real pain in ass test , maintain. wouldn't solution better?:

class foo   attr_reader :a, :b, :c    def initialize     # things belong in initialize   end    def self.call # or other name     new.build_things   end    def build_things     build_a     build_b     build_c   end end 

the drawback use foo.call instead of foo.new. if don't want class 'feel' service object, i'd go ahead , wrap in one, foobuilder. way avoid callbacks, testing easy , code clean , readable. think it's best approach if want build_things after initialization.


Comments

Popular posts from this blog

dns - How To Use Custom Nameserver On Free Cloudflare? -

python - Pygame screen.blit not working -

c# - Web API response xml language -