JavaRush /Blog Java /Random-ES /Planificación de proyectos: medir dos veces - cortar una ...

Planificación de proyectos: medir dos veces - cortar una vez - "Proyecto Java de la A a la Z"

Publicado en el grupo Random-ES
Saludos compañeros. Hoy vamos a hablar sobre el tipo de trabajo de preparación que debes hacer antes de comenzar a codificar de manera salvaje. Más específicamente, sobre planificación y creación de una arquitectura de aplicaciones. Proyecto Java de la A a la Z. Planificación del proyecto: medir siete veces - cortar una vez - 1¿Pero por dónde empezar? ¿Cómo construir esta arquitectura? Como ocurre con todo, hay que empezar desde el principio. Es decir, con IDEA. La idea de nuestro proyecto era crear un bot de Telegram útil con funcionalidad básica. Repitamos exactamente qué: "Yo, como usuario, quiero poder recibir notificaciones cuando se publiquen nuevos artículos en aquellos grupos de JavaRush que me interesen". Siguiendo el principio YAGNI, construiremos nuestra aplicación. Esto significa que sólo tomaremos lo que necesitemos. No crearemos funcionalidades por adelantado y en reserva sólo porque queramos y algún día podría resultar útil. Sí, crearemos una aplicación legible y extensible, pero esto no significa que crearemos un esquema de base de datos "para crecer". Para no apoyar este “crecimiento”, decidí que sería mejor abandonarlo por completo. Esto nos ayudará a evitar soporte innecesario durante el desarrollo y pruebas innecesarias. Más adelante, cuando nuestro proyecto entre en producción (de nuevo un anglicismo, de la abreviatura prod - producción), podremos hacer algo más. Una vez que hayas decidido una idea, tendrás que ponerte un poco travieso y dibujar. ¿Qué dibujar? Necesitaremos la capacidad de guardar datos sobre suscripciones a grupos de diferentes usuarios. Sé que puedes usar una ID de usuario en forma de ID de chat en Telegram. Y tenemos una idea de cómo se realizará realmente la búsqueda de nuevos artículos: buscaremos nuevos artículos en todos los grupos que tengan suscripciones y los enviaremos a los chats. En base a esto, obtenemos lo siguiente como una primera aproximación (aquí está el desarrollo sin adornos): Proyecto Java de la A a la Z. Planificación del proyecto: medir siete veces - cortar una vez - 2No espero que entiendas mi letra: quiero mostrar exactamente cómo y dónde comienza el desarrollo. La primera etapa ha sido completada: de alguna manera hemos decidido lo que sucederá. Los modelos/tablas de la base de datos se describen arriba. Pero éste es un borrador: puede y debe pulirse y adoptar una forma más legible. Mientras pulía, recordé que también quería obtener estadísticas sobre el trabajo del bot. Agregó esto. En este dibujo queda más que claro qué y cómo se dispondrá. Es decir, qué tablas y campos habrá en ellos, qué nombres de entidades habrá para las tablas. Se decidió que serían varios:
  • Usuario: información sobre el usuario de Telegram que utilizará nuestro bot. Como puede ver, solo guardamos la ID del chat y la bandera si el usuario está activo o no. ¿Por qué? Porque nuestro objetivo no es recopilar información sobre los usuarios, sino beneficiarlos;
  • GroupSub: aquí habrá información sobre el grupo al que está suscrito y el último artículo que se envió a los suscriptores;
  • Estadísticas: no he creado un esquema para ello; lo haremos más adelante. Este no es el objetivo principal del MVP del proyecto.
Proyecto Java de la A a la Z. Planificación del proyecto: medir siete veces - cortar una vez - 3Después de eso, quería mostrar con más detalle la forma de buscar nuevos artículos. Para hacer esto, utilicé un diagrama BPMN, que convertí en una imagen y obtuve esto: Proyecto Java de la A a la Z. Planificación del proyecto: medir siete veces - cortar una vez - 4Aquí todo es más legible y comprensible. Trabajaremos según este esquema en la búsqueda. A los gerentes les gusta mucho este esquema, porque es comprensible no solo para los programadores :D En general, se ha comenzado.

Crear un repositorio para el trabajo

Finalmente, puedes crear un repositorio para trabajar con un bot de Telegram.Proyecto Java de la A a la Z. Planificación del proyecto: medir siete veces - cortar una vez - 5
  1. Completamos los elementos que ya nos son familiares: el nombre del repositorio, su breve descripción.
  2. Agregue una licencia: Apache 2.0 (puede elegir la licencia a su discreción).
  3. Nuestro proyecto ya está disponible; aquí está el enlace: JavaRush Telegrambot .

Crear un proyecto en el repositorio.

Para trabajar con el proyecto, sería bueno utilizar herramientas de GitHub, como project. ¿Lo que es? Este es un lugar donde puede crear tareas, realizar un seguimiento de su finalización y guardar el estado de las tareas. Determina quién los llevará a cabo y más. Para ello, en el proyecto creado encontraremos el botón Proyectos , y allí crearemos uno nuevo: Proyecto Java de la A a la Z. Planificación del proyecto: medir siete veces - cortar una vez - 6Como puedes ver, aquí indiqué el nombre del proyecto, lo describí y seleccioné la plantilla sobre la cual trabajaremos - Kanban automatizado. Para nosotros ahora no es tan importante lo que esto significa. Lo principal es que tendremos un tablero con tareas, dividido en columnas, donde cada columna será el estado de la tarea:
  1. Por hacer: todas las tareas que se planean realizar;
  2. En progreso: tareas en las que se está trabajando actualmente;
  3. Listo: tareas que ya se han completado dentro de este proyecto.
De esta forma sabremos sobre el estado de nuestras tareas. Cuáles están en progreso, cuáles ya están terminados. Además, esto es importante y conveniente no solo en los casos en que hay un equipo, sino también cuando trabajas solo. Para que aparezca algo en el tablero, debes crear problemas.

Redacción de cuestiones (problemas) para el proyecto.

Para entender qué tareas escribir, decidamos qué tendremos en el proyecto. Necesitamos una aplicación que pueda iniciarse fácil y rápidamente, para que podamos acceder a la base de datos, para que podamos administrar y cambiar el esquema de la base de datos, para que podamos realizar solicitudes REST en JavaRush para obtener datos sobre artículos. En base a esto, puede elegir las siguientes tecnologías:
  • SpringBoot: como marco para nuestra aplicación,
  • Spring Data: para trabajar con una base de datos,
  • Flyway: para trabajar con migraciones de bases de datos,
  • MySQL: como base de datos para el proyecto,
  • Iniciador Telegrambot StringBoot: una biblioteca para trabajar con un bot de Telegram,
  • Unirest es una biblioteca para trabajar con solicitudes REST.
De todo lo anterior, comencemos a crear tareas.

Plantilla de creación de tareas

Crearemos tareas usando la siguiente plantilla:
  1. El nombre de la tarea se verá así: JRTB-{IssueNumber}:{IssueDescription} , donde:
    • {IssueNumber} es el número de serie del problema. Tomemos uno más del último problema;
    • {IssueDescription}: una breve descripción del problema.
  2. En el cuerpo de la tarea haremos una descripción más detallada de la misma (en ocasiones puede coincidir con la descripción del nombre de la tarea).
  3. Los criterios de aceptación son una lista de requisitos, después de los cuales la tarea puede considerarse completada. Por así decirlo, los criterios para aceptar la tarea. Utilizándolos, un revisor (del inglés revisor - revisor - una persona que observa cómo se completa una tarea) puede comprender si la tarea se completó por completo o no.
Usando esta plantilla, crearemos nuestra primera tarea: Proyecto Java de la A a la Z. Planificación del proyecto: medir siete veces - cortar una vez - 7también vale la pena señalar que al crearla, determiné inmediatamente para qué proyecto era adecuada esta tarea, quién la realizaría (asignado) y a qué etiqueta (etiqueta) pertenecía esta tarea. A continuación, simplemente mostraré los nombres de las tareas con una pequeña descripción y enlaces a las mismas. Están todos aquí . Realizaremos las tareas aproximadamente en el mismo orden que se indica aquí:
  1. [FUNCIÓN] JRTB-0: cree el proyecto de arranque Skeleton Spring : aquí todo está claro: debe hacer la primera parte de lo que hicimos en el artículo anterior.
  2. [FUNCIÓN] JRTB-2: agregue un bot de Telegram al proyecto : agregue un bot vacío que simplemente responderá y dirá que está vivo y coleando.
  3. [CARACTERÍSTICA] JRTB-3: Implementar el patrón de comando para telegrambot : configuremos el enfoque correcto para trabajar con comandos en un telegram bot. Hasta el momento para varios equipos.
  4. [CARACTERÍSTICA] JRTB-1: Agregar capa de repositorio : esta es una de las tareas más importantes: combina todo lo que se necesita hacer para trabajar con la base de datos.
  5. [CARACTERÍSTICA] JRTB-5: Como usuario, quiero agregar el grupo a la suscripción ; esta ya es la primera historia de usuario en el sentido ágil. Esto será un beneficio real para nuestros usuarios: será posible agregar suscripciones grupales al bot.
  6. [CARACTERÍSTICA] JRTB-12: Implementar la programación para enviar notificaciones sobre nuevos artículos : aquí se implementará la búsqueda de nuevos artículos si se publican para cada uno de los grupos y se envían a todos los usuarios que están suscritos a los grupos.
  7. [FUNCIÓN] JRTB-6: Como usuario, quiero ver la lista de mis suscripciones grupales ; aquí todo es simple: agregamos un comando que muestra una lista de todos los grupos a los que está suscrito el usuario.
  8. [FUNCIÓN] JRTB-7: Como usuario, quiero eliminar la suscripción grupal de mis suscripciones ; aquí debe eliminar la suscripción del usuario a las actualizaciones del grupo.
  9. [FUNCIÓN] JRTB-8: Como usuario, quiero configurar el uso del bot como inactivo ; implementar la detención del bot. Es decir, todo lo que hay que hacer en nuestro sistema para que se detenga el trabajo. Agregue el comando /stop al procesamiento.
  10. [CARACTERÍSTICA] JRTB-9: Como usuario, quiero comenzar a trabajar con el bot O configurarlo como activo si lo usé antes ; agregar el procesamiento del comando /start. Exactamente como lo queremos.
  11. [FUNCIÓN] JRTB-10: Como administrador, quiero ver las estadísticas de los bots , creando una colección de estadísticas de bots. Agregar capacidades de administrador.
  12. [CARACTERÍSTICA] JRTB-11: Como usuario, quiero ver la documentación de este bot de Telegram : escribir documentación. Sí, sí, amigos, no pueden vivir sin él, y cuanto antes aprendan a hacerlo, mejor será para ustedes))
Esto ya parece el comienzo del proyecto. Por así decirlo, trabajamos como arquitecto de proyectos y analista de negocios.

Llenando el repositorio

¿Qué más hay que hacer ANTES de empezar a codificar? - Autor, ¿cuántos de estos párrafos puedes agregar, los estás sacando del abismo? — No, la calidad del trabajo se demuestra en los detalles. Y son ellos los que tienen sentido. Entonces agreguemos un detalle más. Para que el proyecto sea popular y comprensible para otros desarrolladores, es necesario completarlo. ¿Qué debo agregar? Describí una lista completa de lo que se puede hacer en el artículo Optimización del trabajo con sus proyectos en GitHub: conociendo el repositorio de plantillas de Github . Recomiendo fuertemente leer esto. Es importante para nosotros tener versiones claras, una comprensión clara de lo que estamos haciendo. Por lo tanto, agregué un archivo RELEASE_NOTES en el que se registrarán los cambios en nuestro proyecto. Como ejemplo, puedes ver RELEASE_NOTES de mi proyecto (sí, ¿por qué no mostrar en qué puse mi energía y creatividad)? Allí se describen los cambios para cada nueva versión. También agregué plantillas para crear nuevas tareas, que tienen 4 opciones:
  • Informe de error es una tarea creada por usuarios/probadores que encuentran un error en su trabajo. Esto es algo muy importante: ayuda a gestionar las correcciones de errores;
  • Una solicitud de función es una tarea para agregar una nueva funcionalidad. Todas las primeras tareas del proyecto son tareas de solicitud de funciones;
  • Solicitud de mejora : una tarea para mejorar el funcionamiento de la aplicación. Por ejemplo, para cambiar las respuestas de las pruebas cuando se trabaja con un bot. No soy un escritor técnico y no puedo dar respuestas del todo correctas. Así que si tienes ganas y capacidad, ofrécelo :)
  • La pregunta es una pregunta para los desarrolladores sobre el funcionamiento de la aplicación. Algo muy útil. Digamos que no se comprende el trabajo o hay dudas sobre alguna pregunta; puedes hacer una pregunta de esta manera y obtener una respuesta de primera mano.
Si miras GitHub, se verá exactamente así: Proyecto Java de la A a la Z. Planificación del proyecto: medir siete veces - cortar una vez - 8Actualmente también tenemos un documento sobre cómo trabajar con la API JavaRush para trabajar con grupos.

¿Que sigue?

Bueno, completamos todos estos pasos y ¿qué, se cerrará el proyecto? No, en absoluto. Este proyecto seguirá vivo. Será desarrollado por mí y por todos aquellos estudiantes/graduados de JavaRush que quieran participar. ¿Cuáles son sus planes para el futuro? Muchos de ellos. El primer plan es crear un cliente Java para la API JavaRush. Los desarrolladores prometieron hacer que su Swagger fuera de acceso abierto. También veremos qué es la arrogancia. Algo genial y muy útil. A continuación integraremos el sitio JavaRush con un bot de Telegram. Conectemos al usuario al bot para sincronizar las suscripciones. Creemos estadísticas sobre la finalización del curso. Y todo lo que quieras como Comunidad JavaRush.

conclusiones

Hoy hablamos del trabajo detrás de escena antes de la creación del proyecto. Más precisamente, sobre cómo crear un plan de trabajo, sin el cual se puede desperdiciar mucha energía. Repito, el inicio del proyecto ya se ha puesto a disposición del público aquí . Como siempre, te sugiero que te suscribas a mi cuenta en Github. De esta manera podrás recibir cambios en el proyecto ANTES de que se publique el artículo. Ya asumo que todos los interesados ​​se han registrado en Github. Sí, el proyecto no avanza tan rápido como nos gustaría. Sin embargo, al igual que los proyectos reales en el trabajo. En el próximo artículo describiré cómo agregar las primeras tareas. ¡Gracias a todos por leer y hasta pronto!

Al principio de este artículo encontrará una lista de todos los materiales de la serie.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION