Primero un descargo de responsabilidad: realmente no sé si esta pregunta se ajusta a este sitio web, pero sigo encontrando que es una pregunta relevante no solo para mí sino para otras personas que son principiantes. Si la pregunta puede ser mejorada para que encaje aquí, por favor señale los comentarios int. Si no encaja, avíseme también y, si es posible, hágame saber dónde se puede discutir esto porque no encontré ningún buen foro para esto.
Aprendí a programar en 2009 cuando estudié PHP. Más adelante en 2012, me mudé a C # y .NET. De todos modos, la codificación no es el problema, escribir algoritmos no es mi problema. Mi problema real es saber qué debe codificarse para cumplir un requisito y dónde debe codificarse.
La mayoría de los cursos disponibles en la web abordan el cómo : cómo escribir código en un idioma determinado, cómo usar algunos conjuntos de API, etc. Ese no es mi punto aquí.
En estos años, he leído mucho sobre un montón de cosas: análisis y diseño orientado a objetos, patrones de diseño, diseño dirigido por dominios, etc. Entiendo, por ejemplo, los principios SÓLIDOS, algunas de las ideas principales de DDD, como la necesidad de involucrar a expertos en dominios, el desarrollo de un lenguaje ubicuo, etc. Me atrevería a decir que tengo una base teórica al menos razonable.
Pero cuando se trata de practicar siento que soy un desastre. Hace algún tiempo necesitaba continuar el desarrollo de un sistema financiero que ya estaba siendo desarrollado por otra persona. Es ese tipo de "sistema antiguo" desarrollado con C # y WinForms. Fue la primera vez que elegí un proyecto con una complejidad de dominio real, con muchas reglas comerciales, etc.
Confieso que cuando recibo los requisitos la mayoría de las veces pienso "¿cómo puede hacerse esto?" - No tengo idea de cómo comenzar a trabajar en los requisitos para averiguar qué se debe hacer. Creo que mis principales confusiones son lo que debo codificar, qué clases, interfaces y dónde va cada pieza de lógica, en qué clase debe estar cada cosa. El problema es que no sé por dónde empezar.
La mayoría de las veces, con mucho pensamiento termino con algunas ideas, pero nunca sé cómo juzgar si mi idea es correcta o no.
Quiero decir que no creo que esto sea una falta de teoría, ya que dije que leí sobre un montón de cosas sobre arquitectura de software y orientación a objetos que me recomendaron, pero no ayudó mucho a identificar lo que se debe hacer en la práctica. .
Entonces, ¿cómo puedo aprender a hacer realmente diseño orientado a objetos? Lo que quiero aprender es: los requisitos dados saben cómo comenzar a trabajar en ellos en un proceso que conduce a descubrir qué hay que hacer y dónde pertenece cada parte del código. ¿Cómo puedo aprender a juzgar si mi idea es correcta o no?
Creo que explicar esto completamente como respuesta aquí no sería posible. Sin embargo, lo que estoy buscando, que puede estar de acuerdo con el estilo del sitio, son respuestas que solo dan una visión general y señalan algunas referencias (libros, cursos en línea, etc.) que pueden usarse para expandir las ideas y realmente aprender estas cosas.