oop - Table-driven factory vs inheritance -
i have bunch of derived classes differ static methods.
(it's ruby, question not ruby, it's design.)
class exporter def export # ... end end class exportera < exporter def 'aaa_table' end def fields ['a1', 'a2', 'a3'] end def 'aaa_file' end end class exporterb < exporter def 'bbb_table' end def fields ['b1', 'b2', 'b3'] end def 'bbb_file' end end so, looked @ , came idea of placing static data kind of table , use exporter appropriate attributes. in case, need kind of exporterfactory class going know who , how create , b exporters.
class exporterfactory def _table return { :a => { :from => 'aaa_table', :fields => ['a1', 'a2', 'a3'], :to => 'aaa_file', }, :b => { :from => 'bbb_table', :fields => ['b1', 'b2', 'b3'], :to => 'bbb_file', }, } end def create(type) return exporter.new(self._table[type]) end end again, looked @ , don't approach. reasons:
- my real data
_tablebigger table looks heavy , ugly. - now can create
exportersdon't make sense. - it looks factory knows much, prefer have data a-export encapsulated in
exportera.
i can't decide. second approach seems more logical, still want use first one. main idea “i want use inheritance organize big , ugly table”.
what should choose? kind of problems i'm going have in each of ways?
i agree factory knows much, meaning has change every time exporter changes. also, if ever have exporter needs additional code, there no way create it. first design allows write exporters override superclass methods if ever need them.
you make first design more succinct putting data in initialize , overriding rather 3 methods:
class exporter attr_accessor :from, :fields, :to def initialize(from, fields, to) self.from = self.fields = fields self.to = end def export # ... end end class exportera < exporter def initialize super 'aaa_table', ['a1', 'a2', 'a3'], 'aaa_file' end end class exporterb < exporter def initialize super 'bbb_table', ['b1', 'b2', 'b3'], 'bbb_file' end end
Comments
Post a Comment