Idea
 
          
          
            ...but not always
            (when your app has useless layer)
          
        
        
          
            Advantages and Disadvantages
          
          
            Advantages
            
              - One place for DB related code
- Database agnostic interface for client
- Common contract for all models
- Unit testing
- Reduces the amount of code
Complex scenarios
            
              - Caching mechanisms
- Audit logging
- Providing record level security system
Disadvantages
            
              - Performance
- Hidden specific feature DB
- You should know what happen behind the scene
- N+1 issue
Kinds
            
              - Manual implementation
- One DB engine
- OData solutions
- Adapter based
Manual
            (most flexible, but require time and qualification)
          
          
            One DB engine
            
              - Mongoose (MongoDb)
- Sequelize (SQL)
- Nohm (Redis)
Adapter based
            (you could use any DB at the same time)
          
        
        
        
          
            Js-Data
            Why do I like it?
          
          
            Main concept
 
          
          
            Features
            
              - Async and Sync methods
- Model lifecycle and hooks
- Events and Change Detection
- Static and instance methods, computed properties
- Query syntax
- Relations
- Validations