i have question ioc, factories, , open/closed principle.
consider, if will, following factory
public function podocument( _type string) ipodocument dim d new podocument if _type = "service" d.header = new servicepoheader() d.details = new servicepolineitems() else if _type = "merchandise" d.header = new merchandisepoheader() d.details = new merchandisepolineitems() end if return d end function
this working me , can nicely have webpage show information heterogeneous collections.
my challenge today told me customer order service , merchandise together. come on, among have seen coming?
so write new set of providers handle added complexity, changed factory include case new type, i'm off , running.
however, have violated open/closed principle changing factory, released production. there way set not changing factory?
thanks in advance.
yes. simplest example case define factory class each _type
, , name them servicefactory
, merchandisefactory
, etc, or put <podocumenttype("service")>
etc on them.
then find factories (for example, using reflection), put them in dictionary(of string, ipodocumentfactory)
, select correct 1 based on key.
in more complicated case, ipodocumentfactory
interface may include cancreate()
method in addition create()
. can select factory on list based on opinion current situation.
note discovery , list resolution support provided out of box di frameworks such unity or autofac.
Comments
Post a Comment