"Demasiado orientado a objetos"

21

Vengo de una sólida formación en OO, y recientemente comencé a trabajar en una organización que, aunque el código está escrito en Java, tiene mucho menos énfasis en un buen diseño de OO que el que estoy acostumbrado. Me han dicho que introduzco "demasiada abstracción", y que en cambio debería codificar la forma en que siempre se ha hecho, que es un estilo de procedimiento en Java.

TDD tampoco se practica mucho aquí, pero quiero tener un código comprobable. Enterrar la lógica empresarial en métodos privados estáticos en grandes "clases de Dios" (que parece ser la norma para este equipo) no es muy comprobable.

Me cuesta comunicar claramente mi motivación a mis compañeros de trabajo. ¿Alguien tiene algún consejo sobre cómo puedo convencer a mis compañeros de trabajo de que usar OO y TDD conduce a un código más fácil de mantener?

Esta pregunta sobre la deuda técnica está relacionada con mi pregunta. Sin embargo, estoy tratando de evitar incurrir en la deuda en primer lugar, en lugar de pagarla después del hecho que es lo que cubre la otra pregunta.

ThuneGrill
fuente
17
¿Cual es tu papel? Grunt desarrollador? Estás jodido, consigue un mejor trabajo. ¿Desarrollador principal? Es posible que pueda marcar la diferencia ...
Matthew Flynn
2
No así la deuda mucho más alta tecnología, como tratar con un mal diseño y la gente que no va a cambiar
ozz
1
Soy consciente de los argumentos técnicos y comerciales, estoy preguntando cómo transmitir mejor este conocimiento a mis compañeros de trabajo que parecen ser ajenos a esto. Ven muchas clases, veo un sistema extensible y comprobable
ThuneGrill
55
Lo siento, tienes que irte. Estás hablando sobre las cabezas de tus colegas. No va a cambiar hasta que el proyecto se vuelva insostenible. Si no te gustan las pruebas manuales y las marchas de la muerte, es mejor que vayas a otro lado.
Kevin Cline
44
Sin ver el código en cuestión (sí, es difícil proporcionar una muestra lo suficientemente buena, así que solo tenemos que confiar en su juicio aquí), es difícil saber si realmente hay falta de OO, o si está empujando el culto de carga sobredimensionado OO abstracciones sin una buena razón. Creo que todos han visto ejemplos de OOP sobredimensionados, donde las abstracciones descansan en una capa de fábricas abstractas que producen fábricas abstractas, etc.
Kromster dice que apoya a Mónica el

Respuestas:

32

No te quejaste de que fuera imposible de mantener, solo que no era de tu agrado. Si es una elección de estilo deliberada, puede ser solo un caso de diferencias creativas irreconciliables, y debe ajustar su estilo para que se ajuste, o encontrar un lugar que se ajuste a su estilo preferido.

La gente puede y escribe código modular, eficiente, bien resumido, relativamente libre de errores en un estilo de procedimiento todo el tiempo. Java es una extraña elección de idioma para una tienda de este tipo, pero puedo ver que suceda si factores externos decidieron el idioma, como la necesidad de desarrollar para Android, por ejemplo.

Todos son genios. Pero si juzgas a un pez por su habilidad para trepar a un árbol, vivirá toda su vida creyendo que es estúpido. - Albert Einstein

Si fue una elección deliberada, realmente no puede juzgarlos por lo bien que se adhieren a los buenos principios de diseño orientado a objetos, debe juzgar por lo bien que se adhieren a los buenos principios de diseño de procedimiento y también refactorizar en consecuencia. Java no le permite escribir código fuera de una clase, por lo que la mera presencia de uno no significa que pretenden que un módulo esté orientado a objetos.

Por otro lado, si el código es un desastre en cualquiera de los paradigmas, probablemente debería reducir sus pérdidas.

Karl Bielefeldt
fuente
3
Es procesal y desordenado. Pero estoy hablando del nuevo código que escribo que se llama "demasiado orientado a objetos"
ThuneGrill
55
El código de procedimiento desordenado que se extiende con el código OO podría no ser una mejora después de todo, solo agrega confusión.
wirrbel
77
@ThuneGrill, Asumes que eligieron su estilo de codificación por ignorancia del diseño orientado a objetos, que si pudieras educarlos, verían la luz. Si alguien con un negocio de software rentable en un lenguaje fuertemente orientado a objetos no ha investigado los beneficios de OOD por ahora, no hay forma de que el "nuevo tipo" lo convenza. Toma mi palabra y la palabra de otros comentaristas. Si no puede o no ajustará su estilo para facilitar la lectura del equipo, debe reducir sus pérdidas.
Karl Bielefeldt
3
@ThuneGrill: Karl tiene razón. Apéguese a razones pragmáticas, no religiosas. OOP es ciertamente una buena idea, pero lo he visto llevado a extremos ridículos. El resultado es hacer montañas de molehills. Las cosas que podrían hacerse en 1000 líneas de código terminan siendo 10,000 líneas de código con clases en abundancia. Entonces, Gee, es difícil de mantener, y el rendimiento apesta. (No importa qué clases de colección se usen)
Mike Dunlavey
1
No necesariamente renunciaría a la idea de que puedes convencer a la gente sobre esto. Es difícil, pero se puede hacer, lo he hecho. Dado que esta pregunta parece cerrada, vea work.stackexchange.com/questions/9703/…
Amy Blankenship
7

Al leer su pregunta, recordé un consejo del programador Pragmatic.

Uno de sus consejos es Be a Catalyst for Change:

Es posible que se encuentre en una situación en la que sepa exactamente qué debe hacer y cómo hacerlo. Todo el sistema solo aparece ante tus ojos, sabes que es correcto. Pero solicite permiso para abordar todo y se encontrará con demoras y miradas en blanco. La gente formará comités, los presupuestos necesitarán aprobación y las cosas se complicarán. Todos protegerán sus propios recursos. A veces esto se llama "fatiga de arranque".

Es hora de cocinar sopa de piedra. Calcule lo que razonablemente puede pedir. Desarrollalo bien. Una vez que lo tengas, muéstrale a la gente y deja que se maravilla. Luego diga "por supuesto, sería mejor si añadiéramos ...". Finge que no es importante. Siéntese y espere a que comiencen a pedirle que agregue la funcionalidad que originalmente quería. A las personas les resulta más fácil unirse a un éxito continuo. Muéstrales un vistazo del futuro y conseguirás que se reúnan.

Entonces, creo que si comienzas a hacer un buen trabajo con tu conocimiento de OO y TDD, pronto comenzarán a buscar y preguntar sobre tu trabajo.

Rodrigo
fuente
Intentando serlo, pero el súper arquitecto (que no codifica) no tendrá nada de eso.
ThuneGrill
Tan pronto como note los beneficios de TDD y un mejor OO (confiabilidad, productividad, ...), ¡llamará su atención!
Rodrigo
3

Para vender nuevas formas de trabajar, debe mostrar beneficios obvios. Escribir más capas de abstracción, sin un beneficio claro pero vago: "puede ser beneficioso para el futuro" no funcionará.

Haga fábricas donde las fábricas hagan más de un tipo de objeto. Use la inyección de dependencia, donde inmediatamente muestra beneficios. Haga interfaces que realmente serán implementadas por más de una clase.

Lo que veo con demasiada frecuencia en "OO verdadero" es que se utilizan técnicas avanzadas para resolver problemas realmente simples de una manera demasiado compleja.

¿Cómo puede mostrar el beneficio de una fábrica si solo va a hacer el mismo objeto? Encuentre un problema en su código que se beneficie de técnicas avanzadas y muestre su punto y trabajo desde allí.

Las guerras se ganan una batalla a la vez.

Pieter B
fuente
1

Solo puede convencerlos adoptando una pequeña porción de código e implementando TDD y mejores prácticas de OO para obtener los beneficios. Los has conducido a la tierra prometida, no solo muestra bonitas postales de ella.

Ciertamente, creo que hay casos de sobre abstracción en uso en muchas bases de código hoy en día. Solo ponga lo que necesita, y eso también incluye abstracciones.

Jon Raynor
fuente
1
Acabo de hacerlo, eso es lo que causó toda la discusión. Y solo introduje 3-4 abstracciones además de la funcionalidad existente
ThuneGrill