Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the purpose of DataService and IDataService in MVVM Light

I'm starting to use MVVM Light version 4,and i can't understand:

  1. Why should i use DataService and IDataService?
  2. Should i create a dataservice for any class in model?
like image 650
mahboub_mo Avatar asked Mar 07 '12 09:03

mahboub_mo


1 Answers

First of all - as usual - in MVVM you do not have to do something, it is a recommendation or best practice. In general you are free to code the data access into your view model - and to do so might be a good practice for small projects or prototypical implementations.

However, you should consider that this also has some drawbacks. The reason for implementing a data service is that this component is reusable and even might be usable in other scenarios like an MVC application. Furthermore, it separates out the concern of getting model from a data store.

The reason for implementing an IDataService is that you can exchange the implementation when you need to, e.g. for supplying design time data. When you need this, you also have to consider the inversion of control pattern that heavily relies on interfaces. In this case also a IOC container might be interesting, although not necessary.

But, first of all the above are recommendations, patterns, design guidelines, and best practices that give you the freedom to design an application that best fits your requirements.

Edit: size of the data service

The design and scope of your data service depends on your application and it's requirements. It can range from a single data service for all you models to one data service per model. Furthermore, the design of you data service interfaces may be a separate decision. One service class can implement several service interfaces, thus allowing for hiding certain aspects (methods) of the implementation from the user.

When designing a data service you should look into the unit of work and repository patterns. There are several sample implementations around.

If you just need a very simple unit of work pattern that is based on a single query you can have a look at my blog, where I wrote about turning an IQueryable into a unit of work pattern. However, this fits only very simple cases, generally a complete implementation with a repository and a proper unit of work item is more advisably.

like image 101
AxelEckenberger Avatar answered Oct 26 '22 16:10

AxelEckenberger