Ho cercato una risposta chiara a questa domanda di progettazione senza successo. Non sono riuscito a trovare aiuto neanche nello ".NET Framework design guidelines" né nello "C# programing guidelines". Io fondamentalmente devo esporre un modello come un'API così gli utenti possono definire e integrare i loro algoritmi nel mio quadro come questo:Delegati (espressioni Lambda) Vs Interfacce e classi astratte
1)
// This what I provide
public abstract class AbstractDoSomething{
public abstract SomeThing DoSomething();
}
Gli utenti hanno bisogno di implementare questa classe astratta, si devono implementare il metodo DoSomething
(che posso chiamare da dentro il mio quadro e utilizzarlo)
2)
ho scoperto che questo può anche acheived utilizzando delegati:
public sealed class DoSomething{
public String Id;
Func<SomeThing> DoSomething;
}
In questo caso, un utente può utilizzare solo DoSomething
classe in questo modo:
DoSomething do = new DoSomething()
{
Id="ThisIsMyID",
DoSomething = (() => new Something())
}
Domanda
Quale di queste due opzioni è migliore per un facile da usare e più comprensibile da esporre come API?
EDIT
In caso di : La registrazione viene effettuata in questo modo (supponendo MyDoSomething
estende AbstractDoSomething
:
MyFramework.AddDoSomething("DoSomethingIdentifier", new MyDoSomething());
In caso di : La registrazione viene eseguita come questo :
MyFramework.AddDoSomething(new DoSomething());
Come si registra AbstractDoSomethings con il framework? – dtb
@dtb Vedi la mia modifica (modificato leggermente anche il codice) – GETah