title: Setup multiple areas with controllers in each area inheriting from a base controller - MVC
body: <p>I am current working on a semi large MVC 2 project and the number of controllers we have with associated views and viewmodels is becoming quite large.  In order to try and provide a bit of separation I have been looking into using the areas feature of MVC 2 and refactoring the project accordingly.</p>
  
  <p>One of the issues I face is we have an inheritance hierachy for our controllers in order to share functionality and properties that we use in concrete controllers that then expose the necessary actions we wish to deal with.</p>
  
  <p>Essentially we currently have a setup like so in our main controllers folder:</p>
  
  <pre><code>Controller (MVC)
  +-- BaseController (Abstract)
        +-- BaseWorkController (Abstract)
            +-- BaseWorkAController (Abstract)
                +-- ... a number of controllers exposing actions
            +-- BaseWorkBControllers (Abstract)
                +-- ... a number of controllers exposing actions
  </code></pre>
  
  <p>I am thinking of creating Areas for each work controller i.e.</p>
  
  <ul>
  <li>Area/WorkA</li>
  <li>Area/WorkB</li>
  </ul>
  
  <p>Each area would have their associated views and viewmodels and even models.</p>
  
  <p>However the problem I seem to face is where do I place the BaseWorkController.  Is it ok to leave that in the main Controllers folder and the area controllers just include a reference to that controller.  Also code in the different areas might need access to different models and even some attributes that we create for certain functionality.</p>
  
  <p>Does this setup seem like an acceptable use of areas.  From what I have read areas seem to help with seperating concerns and functionality which is what I'm looking for.  However I don't want to invest in doing this if it is a complete wrong use of the functionality?</p>
  
  <p>Is it acceptable that controller code use functionality from other areas or the main core controller/model/view folders. </p>