code: function initViews () {
      // list of views - may be empty
      this.modelViews = []
      // if view is false no model views will be applied overriding any defaults
      if (this.args.view === false) {
          return
      }
      // get view from args or default
      var viewArg = defined(this.args.view) ? this.args.view : this.model.views.default
      // skip unless view arg is set from args or default
      if (!defined(viewArg)) {
          return
      }
      // list of views to apply to model
      var views
      // if view is string then convert to array
      if (typeof viewArg === 'string') {
          views = [viewArg]
      }
      // if view is array use it
      else if (Array.isArray(viewArg)) {
          views = viewArg
      }
      // invalid argument
      else {
          throw this.error('invalid view argument')
      }
      // iterate over views getting model view objects
      _.each(views, view => {
          var modelView = requireValidModelView(view, this.model.views, true)
          // if result is array then add all
          if (Array.isArray(modelView)) {
              _.each(modelView, modelView => this.modelViews.push(modelView))
          }
          // otherwise add object
          else {
              this.modelViews.push(modelView)
          }
      })
      // instantiate model view engine if there are views
      if (this.modelViews.length > 0) {
          this.modelViewEngine = new ImmutableCoreModelViewEngine({query: this})
      }
  }
docs: @function initViews
  
  get list of model views to be applied to query results based on model
  defaults and query args.
  
  @param {object} model
  @param {object} args
  
  @returns {array}
  
  @throws {Error}