Desarrollo con POO + principios SOLID

La idea de SOLID es que crees una estructura de clases que sea mantenible en el tiempo y extensible en el tiempo.

S <– toda clase debería tener una sola responsabilidad

O <– toda entidad debería estar abierta a la extensión pero cerrada a la modificación. Cuando extendés la funcionalidad implica que lo que ya hacías se sigue manteniendo, pero le agregas comportamiento, no le quitas comportamiento ni le modificas comportamiento

L <– Principio de sustitución de Liskov (acá me aclaró mucho el comentario de Lucas), Las clases hijas deben poder sustituir a su clase padre. Es decir si alguien esta usando a tu clase padre, en vez de una instancia de tu clase padre te pasan a vos, vos deberías poder cumplir con las tareas que hace tu clase padre (por algo heredas de esa clase). Esto te permite pensar siempre que haces herencia, la herencia sea coherente.

I <– Segregación de interfaces, siempre interponer interfaces especificas a cada cliente tuyo en vez de una general para todo el mundo así evitas que todos implementen métodos innecesarios y no aplicables a todo el mundo.

D <– Inversión de dependencias (acá también iluminó Lucas). Básicamente lo que dice es que cuando tenes objetos que dependen de vos, no dependan directamente de vos, sino que entre ambos haya una interfaz siempre, de esa manera, el objeto dependiente de vos se puede cambiar por otro sin afectarte como clase (total ambos deben respetar la interfaz)

Evolución del desarrollo de sofware

Hace mucho que no escribo, en este mi espacio de divulgar información al mundo. Suelo escribir solo cuando algo me complicó, o me ayudo mucho o que me sorprende en algo. Ultimamente no me estaba pasando nada dificil de resolver o interesante. Y ustedes saben que no voy a escribir por escribir, no va de eso el espiritu de este espacio.

Bien!, al fin ocurrió algo que me resultó interesante y que me ayudó (sabiendo lo que implica esa ayuda)

ahora llegó la hora de usar la inteligencia artificial a mis propositos.

Siempre suelo ejecutar una serie de pasos ( click aqui ) para actualizar mi servidor de nextcloud que lo vengo manteniendo para tener mi propio google drive pero que solo yo lo tenga y disponible en cualquier lugar donde vaya.

Hace mucho que vengo con la idea de armar un script que me permita automatizar esa tarea, hace tiempo que vengo viendo este tema de la inteligencia artificial involucrado en la programación. Hice un curso incluso de esto para entender de que va por dentro en su funcionamiento.

Entonces bien, le pedi que me arme un script en bash que ejecute las instrucciones que solia ejecutar, que pida los numero de version, que se fije que la version nueva sea mayor que la vieja, y que en cierto punto lo ejecute como root. Aca les paso el script que armó, y ejecuté con exito en mi servidor para pasar de la ultima version de la 29 a la 30.

Esta version que les paso fue despues de varios pedidos mejorando el script:


#!/bin/bash

# Verificar si se han pasado dos argumentos
if &#91; "$#" -ne 2 ]; then
    echo "Uso: $0 /version_nueva/ /version_vieja/"
    exit 1
fi

# Asignar las versiones a variables
version_nueva=$1
version_vieja=$2

# Mostrar la elección
echo "Has elegido la versión nueva: $version_nueva y la versión vieja: $version_vieja"

# Comparar las versiones
if &#91;&#91; "$version_nueva" > "$version_vieja" ]]; then
    echo "La versión nueva ($version_nueva) es mayor que la versión vieja ($version_vieja)."
else
    echo "Error: La versión nueva ($version_nueva) no es mayor que la versión vieja ($version_vieja)."
    exit 1
fi

# Ejecutar los comandos después de la comparación
echo "Comenzando la actualización a Nextcloud $version_nueva..."

# Paso 1: Cambiar a la carpeta de inicio
echo "Cambiando a la carpeta de inicio..."
cd ~

# Paso 2: Crear una carpeta para descomprimir
echo "Creando carpeta temporal para descomprimir..."
mkdir nextcloud_descomprimir
cd nextcloud_descomprimir

# Paso 3: Descargar el archivo de la nueva versión
echo "Descargando Nextcloud versión $version_nueva..."
wget "https://download.nextcloud.com/server/releases/nextcloud-$version_nueva.tar.bz2"

# Paso 4: Descomprimir el archivo
echo "Descomprimiendo el archivo descargado..."
tar xjf "nextcloud-$version_nueva.tar.bz2"

# Paso 5: Renombrar la carpeta extraída
echo "Renombrando la carpeta de Nextcloud a nextcloud-$version_nueva..."
mv nextcloud "nextcloud-$version_nueva"

# Paso 6: Mover la nueva versión a /var/www/html/
echo "Moviendo la nueva versión a /var/www/html/..."
sudo mv "nextcloud-$version_nueva" /var/www/html/

# Paso 7: Cambiar a la carpeta /var/www/html/
echo "Cambiando al directorio /var/www/html/..."
cd /var/www/html/

# Paso 8: Copiar el archivo de configuración de la versión anterior
echo "Copiando archivo de configuración de la versión $version_vieja..."
cp "nextcloud-$version_vieja/config/config.php" "nextcloud-$version_nueva/config/config.php"

# Paso 9: Cambiar los permisos de la nueva versión
echo "Cambiando los permisos de la nueva versión..."
sudo chown www-data:serg -Rf "nextcloud-$version_nueva"
sudo chmod 775 -Rf "nextcloud-$version_nueva"

# Paso 10: Crear una carpeta de backup para la configuración de la versión vieja
echo "Creando carpeta de respaldo para la configuración de la versión $version_vieja..."
cd ~
mkdir -p "backup/nextcloud/$version_vieja"
cd "backup/nextcloud/$version_vieja"

# Paso 11: Copiar la configuración de la versión vieja al backup
echo "Realizando copia de seguridad del archivo de configuración de la versión $version_vieja..."
cp -Rf "/var/www/html/nextcloud-$version_vieja/config" ./

# Paso 12: Realizar backup de la base de datos usando mysqldump como root
echo "Realizando backup de la base de datos de Nextcloud versión $version_vieja..."
sudo bash -c 'mysqldump -uroot -p..1323 nextcloud --default-character-set=utf8mb4 | gzip -9 > ./nextcloud-'$version_vieja'.sql.gz'

# Paso 13: Poner Nextcloud en modo mantenimiento
echo "Poniendo Nextcloud $version_vieja en modo mantenimiento..."
cd "/var/www/html/nextcloud-$version_vieja"
sudo -u www-data php occ maintenance:mode --on

# Paso 14: Editar configuración de Apache para la nueva versión
echo "Editando la configuración de Apache para la nueva versión..."
sudo vim /etc/apache2/sites-available/cloud.conf   # Cambiar el directorio a la nueva versión
sudo vim /etc/apache2/sites-available/cloud-le-ssl.conf  # Cambiar el directorio a la nueva versión

# Paso 15: Reiniciar el servicio de Apache
echo "Reiniciando Apache..."
sudo service apache2 restart

# Paso 16: Editar archivo de configuración de Nextcloud
echo "Actualizando el archivo de configuración de Nextcloud con la nueva versión..."
sudo vim "/var/www/html/nextcloud-$version_nueva/config/config.php"   # Cambiar la versión en el parámetro

# Paso 17: Ejecutar la actualización de Nextcloud
echo "Ejecutando la actualización de Nextcloud a la versión $version_nueva..."
cd "/var/www/html/nextcloud-$version_nueva"
sudo -u www-data php occ upgrade

# Paso 18: Escanear los archivos del usuario serg
echo "Escaneando los archivos del usuario serg..."
sudo -u www-data php console.php files:scan serg

echo "Proceso de actualización completado para Nextcloud $version_nueva."

Enjoy!