Entendiendo el Principio Abierto Cerrado

Yo estaba refactorización algún código antiguo de un analizador de archivos de script simple cuando me encontré con el siguiente código:

StringReader reader = new StringReader(scriptTextToProcess);
StringBuilder scope = new StringBuilder();
string line = reader.ReadLine();
while (line != null)
{
    switch (line[0])
    {
        case '

Este simple procesador de scripts me parece un buen candidato para refactorizar aplicando el "principio abierto cerrado". Las líneas que comienzan con una$ probablemente nunca se manejará de manera diferente. Pero, ¿qué pasa si las nuevas directivas comienzan con una! necesita ser agregado? ¿O se necesitan nuevos identificadores de procesamiento (por ejemplo, nuevos casos de conmutación)?

El problema es que no pude descubrir cómo agregar de manera fácil y correcta más directivas y procesadores sin romper el OCP. Los! -case usandoscope y / o line lo hace un poco complicado, al igual que eldefault-caso

¿Alguna sugerencia

: // Process the entire "line" as a variable, // i.e. add it to a collection of KeyValuePair. AddToVariables(line); break; case '!': // Depending of what comes after the '!' character, // process the entire "scope" and/or the command in "line". if (line == "!execute") ExecuteScope(scope); else if (line.StartsWith("!custom_command")) RunCustomCommand(line, scope); else if (line == "!single_line_directive") ProcessDirective(line); scope = new StringBuilder(); break; default: // No processing directive, i.e. add the "line" // to the current scope. scope.Append(line); break; } line = reader.ReadLine(); }

Este simple procesador de scripts me parece un buen candidato para refactorizar aplicando el "principio abierto cerrado". Las líneas que comienzan con una$ probablemente nunca se manejará de manera diferente. Pero, ¿qué pasa si las nuevas directivas comienzan con una! necesita ser agregado? ¿O se necesitan nuevos identificadores de procesamiento (por ejemplo, nuevos casos de conmutación)?

El problema es que no pude descubrir cómo agregar de manera fácil y correcta más directivas y procesadores sin romper el OCP. Los! -case usandoscope y / o line lo hace un poco complicado, al igual que eldefault-caso

¿Alguna sugerencia

Respuestas a la pregunta(1)

Su respuesta a la pregunta