Conozco un poco acerca de Object Oriented design, pero no estoy seguro de cómo utilizar estos principios en mi código. Esto es lo que estoy trabajando en:¿Cómo puedo diseñar esto mejor? (Evitar una instrucción de conmutación con diseño orientado a objetos)
public void Query(Agency agency, Citation queryCitation) {
queryCitation.AgencyCode = agency.AgencyCode;
switch (agency.ClientDb.Type) {
case "SQL":
QueryOracle(agency, queryCitation);
break;
case "PIC":
QueryPick(agency, queryCitation);
break;
}
}
(.. La mayoría de estos son objetos de NHibernate que estoy trabajando con un sistema de bases de datos existentes y estoy refactorización partes de ella en una biblioteca de código) Claramente, lo que podía hacer algo diferente aquí para que no necesite funciones duplicadas para diferentes consultas de bases de datos que tienen la misma entrada. Solo debe saber, basado en el objeto de la agencia, si usar una base de datos Oracle o una conexión de base de datos Pick. (Si nunca escuchó de una base de datos de Pick, tampoco la tuve hasta que comencé a trabajar aquí. Hacemos consultas a través de solicitudes HTTP, por lo que no es SQL.)
¿Debo hacer una interfaz, para ejemplo llamado "ClientDbConnection" y luego crear dos clases que implementan esa interfaz, mover el código para consultar la base de datos a aquellos y luego tener algo como "agency.clientDb.Query (queryCitation)" reemplazar esta función completa? Creo que estoy pensando en voz alta aquí, pero cualquier comentario sobre esto sería apreciado.
¿Puedes explicarlo? Las respuestas de solo enlace no son bienvenidas en Stackoverflow. –