title: How do sequelize getter and setters work?
body: <p><strong>Summary of question:</strong> Conceptually, what are getters and setters and why would we use them?</p>
  
  <p>Excerpt from <a href="http://docs.sequelizejs.com/en/latest/docs/models-definition/?highlight=getterMethods#getters-setters" rel="noreferrer">http://docs.sequelizejs.com/en/latest/docs/models-definition/?highlight=getterMethods#getters-setters</a>:</p>
  
  <blockquote>
    <p>It is possible to define 'object-property' getters and setter functions on your models, these can be used both for 'protecting' properties that map to database fields and for defining 'pseudo' properties.</p>
  </blockquote>
  
  <ol>
  <li><p>What does it mean by 'protect'? Against what?</p></li>
  <li><p>What are 'psuedo' properties?</p></li>
  </ol>
  
  <p>I'm also struggling with the example code below. We appear to be setting 'title' twice. And what is the argument 'v'?</p>
  
  <p>See below:</p>
  
  <pre><code>var Foo = sequelize.define('Foo', {
    title: {
      type     : Sequelize.STRING,
      allowNull: false,
    }
  }, {
  
    getterMethods   : {
      title       : function()  { /* do your magic here and return something! */ },
      title_slug  : function()  { return slugify(this.title); }
    },
  
    setterMethods   : {
      title       : function(v) { /* do your magic with the input here! */ },
    }
  });
  </code></pre>
  
  <p><strong>A concrete example instead of "do magic" would be greatly appreciated!</strong></p>