2011-05-23 11 views
5

Tengo un programa de administración de base de datos (sql) en el que he estado trabajando y que trata con los artículos que vende mi empresa. Para la parte principal del programa, la información del elemento se actualiza a medida que el usuario pasa por el uso de algunos controles personalizados. Eso todo funciona bien. Pero ahora estoy en la sección de nivel superior del programa que está agregando/eliminando/copiando elementos. No se puede "actualizar sobre la marcha", como editar la información del artículo, ya que sería muy fácil arruinarlo demasiado. Así que básicamente quiero configurar un archivo-> guardar el tipo de trato para ellos aquí. Cómo veo que esto funciona es crear todos los comandos sql en una lista y luego ejecutarlos al guardar.Cola de comandos

Las funciones disponibles aquí serían agregar un nuevo elemento, eliminar un elemento, copiar de otro elemento y cambiar el nombre.

por lo que sería una lista como:

insert... 
update... 
update... 
delete... 
update... 
etc. 

Sería correr a través y ejecutar todos los comandos. El problema que estoy teniendo es que ya tengo una clase que tiene métodos para manejar todas estas funciones. No puedo pensar en una forma de llamar a todos esos métodos en una cola, y volver a escribir todas las sentencias SQL en otra clase me parece estúpido. ¿Hay una manera que puedo recordar una lista de algo así como:

item.Rename() 
item.ChangeSize() 
item.Delete() 

me siento como que estoy pensando demasiado esto ... o tal vez underthinking ... no sé.

Respuesta

6

Lo que usted está buscando es el Command Pattern.

La idea básica es que tiene una interfaz ICommand que tiene un método Execute().
Luego implementa múltiples ConcreteCommand, p. Ej. a RenameCommand con un constructor parametrizado o una propiedad NewName.

No olvide manejar excepciones en consecuencia y quizás implemente también un Método de Deshacer, si esto pudiera ocurrir. No sé lo suficiente acerca de su aplicación para hacer suposiciones aquí.

public interface ICommand 
{ 
    void Execute(); 
} 

public class RenameCommand : ICommand 
{ 
    private string newName; 

    public RenameCommand(string newName) 
    { 
     this.newName = newName; 
    } 

    void ICommand.Execute() 
    { 
     item.rename(newName); 
    } 
} 
+1

Muchas gracias. Acabo de probar un poco de esto y puedo ver que va a funcionar bastante bien. Mucho más fácil de lo que esperaba que fuera también. – Nick