He estado buscando una respuesta clara a esta pregunta de diseño sin éxito. No pude encontrar ayuda ni en el ".NET Framework design guidelines" ni en el "C# programing guidelines". básicamente tengo que exponer a un patrón como una API para que los usuarios pueden definir e integrar sus algoritmos en mi marco de esta manera:Delegados (expresiones Lambda) Vs Interfaces y clases abstractas
1)
// This what I provide
public abstract class AbstractDoSomething{
public abstract SomeThing DoSomething();
}
Los usuarios necesitan la implementación de esta clase abstracta, que que poner en práctica el método DoSomething
(que puedo llamar desde dentro de mi marco y utilizarlo)
2)
descubrí que esto también puede acheived mediante el uso de los delegados:
public sealed class DoSomething{
public String Id;
Func<SomeThing> DoSomething;
}
En este caso, un usuario sólo puede utilizar DoSomething
clase de esta manera:
DoSomething do = new DoSomething()
{
Id="ThisIsMyID",
DoSomething = (() => new Something())
}
Pregunta
Qué de estas dos opciones es mejor para un fácil, útil y lo más importantemente comprensible para exponer como una API?
EDITAR
En caso de : El registro se realiza de esta manera (suponiendo MyDoSomething
extiende AbstractDoSomething
:
MyFramework.AddDoSomething("DoSomethingIdentifier", new MyDoSomething());
En caso de : El registro se realiza como esto :
MyFramework.AddDoSomething(new DoSomething());
¿Cómo registra el usuario AbstractDoSomethings con su marco? – dtb
@dtb Por favor, vea mi edición (modificó un poco el código también) – GETah