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