Pregunta

Para mis propósitos, necesito buscar un nodo específico en un archivo XML y, si lo encuentra, lo elimina. Debería tirar de la funcionalidad de búsqueda hacia su propio método y eliminar la funcionalidad fuera en su propio método? Parece más caro que hacerlo de esta manera porque voy a estar buscando el archivo XML una vez para ver si existe y buscar de nuevo para eliminarlo. Si combino estas dos funcionalidades en un solo método que pueda eliminar las cosas bien cuando lo encuentro. Estoy entendiendo correctamente SRP aquí?

¿Fue útil?

Solución

¿Tiene alguna otras razones / situaciones en las que usted está buscando el archivo XML? En general, es una buena cosa para separar distintos puestos de trabajo en cualquier nivel, sin tener en cuenta la adhesión a la regla o la violación de una persona (que es mi regla ;-)). La separación de estas funciones puede (?) También hacen que el código sea más comprensible, que puede llegar a ser más importante que un aumento de trivial en el rendimiento.

Otros consejos

Su promedio Analizador XML creará nodos, que saben que sus padres lo que puede hacer algo como:

XmlNode node = this.FindNode(filter);
node.ParentNode.DeleteChild(node);

De esta manera se ha dividido ambas funciones, pero ninguna sobrecarga.

En cuanto al núcleo de su pregunta: Sí., Búsqueda y eliminación en un método viola la única responsabilidad, pero el rendimiento y la SRP no se mezclan tan bien en muchos casos, por lo que tiene que decidir lo que es más importante

PS:
El ejemplo no (a sabiendas) relacionada con cualquier lenguaje real que hay. Es

No, el único principio de responsabilidad no se trata de los detalles de cómo el código está escrito. Se trata de cómo dividir la funcionalidad de un programa en clases. Se dice que si es probable que cambie por más de una razón de una clase, debe ser de dos clases. Un ejemplo clásico es una clase que construye y da formato a un informe; el contenido del informe y el formato del informe son susceptibles de cambiar en diferentes momentos, por lo que la clase es un buen candidato para la refactorización en dos.

Usted no dice lo que la responsabilidad funcional de su clase es, pero, desde el punto de vista de cualquier trabajo que se supone que su clase que hacer, buscar y eliminar el nodo XML son sólo partes de que solo puesto de trabajo, y haciendo de la misma clase y en una sola operación no viola la SRP.

(Por otro lado, si su clase tenía una gran cantidad de lógica de dominio y también un montón de tuercas y tornillos sobre la manipulación de XML, se violaría la SRP.)

No viola comando de consulta Separación Principio que siento va mano -in-mano con SRP. Búsqueda y eliminación son dos cosas puede cambiar de modo que también se podrían definir como dos responsabilidades separadas. Pueden ser unidad de prueba por separado, es posible que tenga un error en la forma en que encuentre el nodo, pero no en la eliminación. Usted también puede querer burlarse de la parte de la deleción. También le da un punto intermedio entre la búsqueda y eliminación (de nuevo esto se remonta a la unidad de pruebas y depuración).

En general, diría que hay un montón de beneficios para comandar la separación consulta así que trato de seguirlo siempre que sea posible.

No optimice prematuramente su código! Escríbelo en la forma más fácil de mantener / mejor diseño puede, entonces, si se trata de un cuello de botella se puede ajustar a él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top