c# - Refactor model bound controller code to a class -
i have code below within controller. looks little messy here , i'd rather refactor jquery class. need database information in number of places within site , seems shame not re-use query.
is possible class? i'm unsure object return if code within class.
var profileviewmodel = (from da in db.table1 ra in db.table2.where(_ra => da.someid == _ra.someid).defaultifempty() rg in db.table3.where(_rg => da.someid2 == _rg.someid2).defaultifempty() re in db.table4.where(_re => da.someid3 == _re.someid3).defaultifempty() da.username == model.musername select new manageuseraccountsviewmodel { firstname = ra.firstname, surname = ra.surname, email = da.username, });
first, want make dumb storage poco. lets call that.
public class dumbstoragepoco { public string firstname {get;set;} public string surname {get;set;} public string email {get;set;} } now go ahead , create data-access-layer class this.
public class useraccountdata { private readonly dbcontext _context; public useracctiondata(dbcontext context) { _context = context; } public get(string username) { return da in _context.table1 ra in _context.table2.where(_ra => da.someid == _ra.someid).defaultifempty() rg in _context.table3.where(_rg => da.someid2 == _rg.someid2).defaultifempty() re in _context.table4.where(_re => da.someid3 == _re.someid3).defaultifempty() da.username == username select new dumbstoragepoco { firstname = ra.firstname, surname = ra.surname, email = da.username, }); } you instantiate useraccountdata in controller, , call method username instance of dumbstoragepoco, pass viewmodel might like. if want further abstraction, may implement repository pattern around data access calls. extract interface useraccountdata , use dependency injection , inversion of control container create further abstract point controller accept proper interface in it's constructor, , make it's calls against expected return type.
Comments
Post a Comment