Better C# design pattern for all different methods each having different input and output
<p>I need to create a <strong>business layer(BL)</strong> with some design pattern so that this BL should return a <strong>businessObject</strong>(which is a POCO) depending on the type(8 types) of search. In my model in MVC layer I will create <strong>ViewModel</strong> from this business object for each type of search.</p>

<p>I have 8 searchBy's and each SearchBy has some behaviours</p>

<p><strong>SearchBy</strong></p>

<p><code>SearchBySubject</code> contains </p>

<pre><code>      List&lt;SubjArea&gt; GetSubj(SubjAreaInput input)
      List&lt;Course&gt; GetCourse(CourseInput input) 
</code></pre>

<p><code>SearchByUnits</code> contains </p>

<pre><code>      List&lt;Unit&gt; GetUnits(UnitInput input)
      List&lt;Variation&gt; GetVariation(VariationInput input)
</code></pre>

<p><code>SearchByGEd</code> contains </p>

<pre><code>      List&lt;Foundation&gt; GetFoun(FoundationInput input)
      List&lt;Category&gt; GetCategory(CategoryInput input)
</code></pre>

<p>..... and other 8 searchBy's have some behaviour    </p>

<p>My Business Object for SearchBySubject feature would be</p>

<pre><code>SearchBySubjectBO
{
   List&lt;SubjArea&gt; subjects {get; set;}
   List&lt;Course&gt; courses {get;set;}
   //some other properties
}
</code></pre>

<p>Both the above properties will not be populated at once, WHen subject is selected in UI then we get courses for that subject i.e. a method to get courses should be executed.</p>

<p>Now I need to invoke these methods in my model(in MVC layer) with a common behaviour in some interface or abstract class so that or anything else.</p>

<p>Please help me to organize behaviours for different searchBy's and invoking them to populate properties in BO.</p>
