Pregunta

¿Qué principios sigues generalmente cuando diseñas clases?

¿Fue útil?

Solución

Principios del diseño de clases orientadas a objetos (los principios "SÓLIDOS")

  • PVP:El principio de responsabilidad única Una clase debe tener una razón, y solo una, para cambiar.
  • OCP:El principio abierto y cerrado Debería poder extender un comportamiento de clases, sin modificarlo.
  • LSP:El principio de sustitución de Liskov Las clases derivadas deben ser sustituibles por sus clases base.
  • Proveedor de Internet:El principio de segregación de la interfaz Haga interfaces de grano fino que sean específicos del cliente.
  • ADEREZO:El principio de inversión de dependencia Depender de las abstracciones, no de las concreciones.

Fuente: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

Otros consejos

No olvides el Ley de Deméter.

El SÓLIDO.principios.
O al menos intento no alejarme demasiado de ellos.

El patrón de diseño más fundamental debe ser beso (mantenlo simple estúpido), lo que significa que a veces no usa clases para algunos elementos en absoluto la solución correcta.

Eso y las tarjetas CRC (Clase, Responsabilidad, Colaboradores) (escriba la tarjeta en sus archivos de encabezado, no en tarjetas reales, de esa manera también son documentos fáciles de entender)

Como se mencionó anteriormente, algunos de los principios fundamentales del diseño orientado a objetos son OCP, LSP, DIP e ISP.

Una excelente descripción general de estos por Robert C.Martin (de Object Mentor) está disponible aquí: Principios y patrones de OOD

El "La adquisición de recursos es inicialización"El paradigma es útil, especialmente cuando se escribe en C++ y se manejan recursos del sistema operativo (identificadores de archivos, puertos, etc.).

Un beneficio clave de este enfoque es que un objeto, una vez creado, está "completo": no hay necesidad de una inicialización en dos fases ni posibilidad de objetos parcialmente inicializados.

débilmente acoplado, altamente cohesivo.

Composición sobre herencia.

El diseño basado en dominios es generalmente un buen principio a seguir.

Básicamente me salgo con la programación de interfaces.Intento encapsular lo que cambia a través de los casos para evitar la duplicación de código y aislar el código en fragmentos manejables (para mi cerebro).Más adelante, si lo necesito, puedo refactorizar el código con bastante facilidad.

Principios SOLID y patrón de Liskov, junto con el patrón de responsabilidad única.

Una cosa que me gustaría agregar a todo esto son las capas. Defina las capas en su aplicación, la responsabilidad general de una capa, la forma en que interactuarán dos capas.En esa capa solo se deben permitir clases que tengan la misma responsabilidad que la de la capa.Hacer esto resuelve mucho caos, garantiza que las excepciones se manejen adecuadamente y garantiza que los nuevos desarrolladores sepan dónde colocar su código.

Otra forma de diseñar es diseñar su clase para que sea configurable, creando un mecanismo donde la configuración se pueda conectar a su clase, en lugar de anular métodos en subclases, identificar qué cambios, ver si eso se puede hacer configurable y garantizar que esta funcionalidad sea derivado de configuraciones

Normalmente trato de encajar la clase en uno de los oo patrones de diseño.

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