Sunday, 15 June 2014

c# - Refactoring a method for specific clients -



c# - Refactoring a method for specific clients -

methods specific customers:

i seek refactore code, lot of logic specifi customer:

public void senddocumentstocustomer(list<case> cases) { foreach(var case in cases) { if(case.customerid==123) { if(case.type==1 || case.type==2) { senddocumentstocustomer123(case) } else if(case.customerid==456) { if(case.type==1 || case.type==3) { senddocumentstocustomer456(case); } } else if(case.customerid==768) { if(case.type==2) { senddocumentstocustomer456(case); } else { senddocumentstocustomer(case); } } }

the list of specific client grow, , conditions modified well. have generic solution, maybe code method doitforclient123 not bad solution , should leave , goint way introduce methods candocumentsbesendtoclient123 , on?

i gratefull input

to separate logic each specific client utilize such code:

abstract class documentsender //base class document sending components { public abstract bool cansend(case @case); // check if sender can send document public abstract void senddocument(case @case); // send document } class defaultdocumentsender : documentsender { public override bool cansend(case @case) { homecoming true; //can process requests } public override void senddocument(case @case) { // } } class customer123documentsender : documentsender { public override bool cansend(case @case) { homecoming @case.customerid == 123; //specific case } public override void senddocument(case @case) { if(@case.type==1 || @case.type==2) { // different } } } //separate class getting right sender class casesenderfactory { readonly list<documentsender> _senders = new list<documentsender>(); public documentsenderfactory() { //initialize list of senders specific. _senders.add(new customer123documentsender()); // add together more specific cases here _senders.add(new defaultdocumentsender()); //last item should default sender } public documentsender getdocumentsender(case @case) { //at to the lowest degree 1 sender needs satisfy status homecoming _senders.first(x => x.cansend(@case)); } }

you can utilize senders this:

var mill = new documentsenderfactory(); foreach(var @case in cases) { var sender = factory.getdocumentsender(@case); sender.senddocument(@case); }

c# refactoring strategy-pattern

No comments:

Post a Comment