asp.net mvc - Difference between Repository and Service Layer? -


in oop design patterns, difference between repository pattern , service layer?

i working on asp.net mvc 3 app, , trying understand these design patterns, brain not getting it...yet!!

repository layer gives additional level of abstraction on data access. instead of writing

var context = new databasecontext(); return createobjectquery<type>().where(t => t.id == param).first(); 

to single item database, use repository interface

public interface irepository<t> {     iqueryable<t> list();     bool create(t item);     bool delete(int id);     t get(int id);     bool savechanges(); } 

and call get(id). repository layer exposes basic crud operations.

service layer exposes business logic, uses repository. example service like:

public interface iuserservice {     user getbyusername(string username);     string getusernamebyemail(string email);     bool editbasicuserdata(user user);     user getuserbyid(int id);     bool deleteuser(int id);     iqueryable<user> listusers();     bool changepassword(string username, string newpassword);     bool sendpasswordreminder(string username);     bool registernewuser(registernewusermodel model); } 

while list() method of repository returns users, listusers() of iuserservice return ones, user has access to.

in asp.net mvc + ef + sql server, have flow of communication:

views <- controllers -> service layer -> repository layer -> ef -> sql server

service layer -> repository layer -> ef part operates on models.

views <- controllers -> service layer part operates on view models.

edit:

example of flow /orders/byclient/5 (we want see order specific client):

public class ordercontroller {     private iorderservice _orderservice;      public ordercontroller(iorderservice orderservice)     {         _orderservice = orderservice; // injected ioc container     }      public actionresult byclient(int id)     {         var model = _orderservice.getbyclient(id);         return view(model);      } } 

this interface order service:

public interface iorderservice {     ordersbyclientviewmodel getbyclient(int id); } 

this interface returns view model:

public class ordersbyclientviewmodel {      cientviewmodel client { get; set; } //instead of clientview, in simple project ef client class used      ienumerable<orderviewmodel> orders { get; set; } } 

this interface implementation. uses model classes , repository create view model:

public class orderservice : iorderservice {      irepository<client> _clientrepository;      public orderservice(irepository<client> clientrepository)      {          _clientrepository = clientrepository; //injected      }       public ordersbyclientviewmodel getbyclient(int id)      {          return _clientrepository.get(id).select(c =>               new ordersbyclientviewmodel               {                  cient = new clientviewmodel { ...init values c...}                  orders = c.orders.select(o => new orderviewmodel { ...init values o...}                   }          );      } } 

Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -