title: Approaches for Application Configuration and Settings (in ASP.NET MVC)
body: <p>For a CMS product/platform, what would be a maintainable and clear approach for editing and storing settings?</p>
  
  <p>I'm not talking about technical (connstring, nh config, ...) settings, but settings that alter the behaviour of the product:</p>
  
  <p>These settings are for example</p>
  
  <ul>
  <li>Online Payment settings</li>
  <li>Available parts and modules</li>
  <li>Default behaviour of the application (showing details of list items by default, default landing page after certain actions)</li>
  <li>...</li>
  </ul>
  
  <p>At this point we don't really have an approach, so the result is that all settings end up in the web.config.</p>
  
  <p>This is probably not the best approach, since this is simply ending in an endless list of obscure key value pairs...</p>
  
  <p>In this scenario we also cannot really anticipate to types (without codegen), so settings with checkboxes or predefined options... are hard to manage.</p>
  
  <p>Another option would be to create the needed tables for each setting (type) and use that as a core setting system, but this will be harder to deploy and manage per customer. </p>
  
  <p>I have lots of half answers to this question but not really a top down solution...</p>
  
  <p>What I mean by top down:</p>
  
  <ul>
  <li>Editing settings (admin screen)</li>
  <li>Where to persist the settings</li>
  <li>Loading the settings, without much hassle, but still in a maintainable way</li>
  <li>Maintain/deploy customer specific settings</li>
  </ul>
  
  <p>So options so far:</p>
  
  <ul>
  <li>(web).config</li>
  <li>.settings files</li>
  <li>DB</li>
  </ul>
  
  <p>But these are all kind of key-value approaches... Any other suggestions?</p>