Ho le seguenti classi:
public abstract class StaticFileController<File, QueryData> : AsyncController
{
private string _resourceName;
public StaticFileController(string resourceName)
{
_resourceName = resourceName;
}
//This method receives _resourceName
protected virtual void DoSomething(string resource)
{
//...
}
}
public class ScriptController : StaticFileController<FileEntity, ScriptQueryData>
{
public ScriptController : base("scripts") { }
}
public class StyleController : StaticFileController<FileEntity, StyleQueryData>
{
public StyleController : base("styles") { }
}
Ora, supponiamo di avere questa classe:
public class ScriptBundleController : ScriptController
{
protected override void DoSomething(string resource)
{
// Use resource name and do something (~50 lines of code)
}
}
Se voglio creare una classe simile per StyleController
, dovrei creare una nuova classe ( con la stessa identica implementazione ):
public class StyleBundleController : StyleController
{
protected override void DoSomething(string resource)
{
// Use resource name and do something (~50 lines of code)
}
}
Questo mi turba perché sembra che io stia duplicando il codice, che mi darà problemi in futuro.
Come posso risolvere questo problema? Voglio che la mia implementazione sia scritta solo in un posto. Capisco che sarebbero probabilmente necessarie due classi, come ScriptBundleController
e StyleBundleController
, ma voglio che il metodo DoSomething()
sia centralizzato in una sola classe.