i new asp.net mvc , stuck on point. working on classified site. situation is, have lot of categories in user can post ads , each ad category have different view. have created controller action like
public actionresult postad(string categoryname, string subcategoryname) { if(categoryname == "vehicle" && subcategoryname == "cars") { var model = new caradviewmodel(); // set caradviewmodel properties... return view("caradcreateview", model); } else if(categoryname == "vehicle" && subcategoryname == "bikes") { var model = new bikeadviewmodel(); // set bikeadviewmodel properties... return view("bikeadviewmodel", model); } else if(categoryname == "property" && subcategoryname == "renthouse") { var model = new renthouseadviewmodel(); // set renthouseadviewmodel properties... return view("renthouseadviewmodel", model); } else................... on , on } my problem have huge number of categories , sub categories 60+. , if keep on coding above 60+ categories , subcategories, postad method going blast , become unmanageable.
please tell me best practice or pattern can bring me out of problem.
unfortunately, of doing cannot avoided. there needs form of model , view selection based on category.
use factory pattern. create base class:
public abstract class basecategory { public abstract string getviewname(); public abstract object createmodelfromformdata(); } for each category, create sub-class derived basecategory , implement abstract functions.
in action, following:
public actionresult postad(string categoryname, string subcategoryname) { basefactory factory; if (categoryname == "vehicle") { if (subcategoryname == "cars") { factory = new carsfactory(); } else ... } else ... return view(factory.getviewname(), factory.createmodelfromformdata()); } i have couple reasons schema:
i purposefully using
if/elsefactory selection. controller going created , re-created every action call. pre-populating list , needlessly create objects categories not selected. simpleif/elsemore efficient. if want preventif/else, can put factories indictionary, select based on categories, lot of needless constructor actions.i made
createmodelfromformdatafunction because assume you'll need copy data posted form data. may require passing in data, left function parameterless.i used base/derived classes because copying of form data need custom model being created , form data being posted. also, saving persistent storage (file or database) may category-specific well.
Comments
Post a Comment