Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Migrar o no migrar (https://www.clubdelphi.com/foros/showthread.php?t=94720)

Dexter182 09-06-2020 01:24:09

Migrar o no migrar
 
Hola a todos!

Tengo una aplicación creada en Delphi 7 que uso en mi negocio y que he ido ampliando, haciendo correcciones, etc. desde hace ya varios años y actualmente estoy llegando a un punto en el que creo que estaría "lista".
Con "lista" me refiero a que las funcionalidades básicas de lo que preciso ya estarían realizadas.

Pero como me conozco y se que más adelante le voy a agregar más funcionalidades les quería pedir que me ayuden a decidir entre las siguientes opciones:

Opción 1º) Seguir atado a Delphi 7 y las nuevas funcionalidades que se me ocurran programarlas en el. Es la opción más cómoda y me evitaría los problemas de migrar (estuve leyendo varios hilos en este foro sobre migración desde versiones antiguas de Delphi a versiones más nuevas y parece ser la opción más sensata).

Opción 2º) Empezar de a poco a migrar el programa a Lazarus o a Delphi Community. Por las pocas pruebas que hice tendría que renegar bastante, pero tendría la ventaja de que una vez hecha la migración todas las nuevas funcionalidades ya las programaría desde un entorno actual.

Opción 3º) Crear las nuevas funcionalidades en un programa aparte, desarrollado desde el nuevo entorno (Lazarus / Delphi Community). La desventaja sería que tendría 2 programas, el viejo para lo esencial y el moderno para las nuevas funcionalidades. La ventaja es que me serviría como excusa para "ponerme al día".

Opción 4º) No se si es posible, pero me gustaría poder crear las nuevas funcionalidades en el nuevo entorno e integrarlas al sistema viejo, no como un programa aparte si no llamándolas desde el programa viejo.

Cualquier consejo será bienvenido!

Saludos! ^\||/

MAXIUM 09-06-2020 03:25:27

Te puedo comentar mi poca experiencia al respecto.

He intentado usar las nuevas versiones de Delphi pero... Delphi 7 es más liviano, rápido de instalar y correr. Funciona bien desde Windows XP a Windows 10, me acomoda mucho el usar CnWizards, librerías un montón de código y trucos que hay en la web.

- Por otra parte, Lazarus no es tan compatible en librerías y proyectos al migrar desde Delphi.
- Delphi Community no es tan gratis. Creo que la licencia la puedes usar por 1 año y luego renovarla hasta quién sabe cuando. Esa incertidumbre no me gusta.

Lazarus para proyectos nuevos y no tan ambiciosos para practicar y ver su potencial.

Delphi Commnity para algo que requiera una mejor interface o tecnología nueva que no me funcione en Dephi 7.

mamcx 09-06-2020 03:39:57

Quedarse obsoleto no tiene sentido.

Llevo +20 años programando y he hecho migraciones que otros considerarían "brutales". De FoxPro DOS a windows, de FoxPro windows a .NET Web, otra de python a c#, luego a python de nuevo.

Pero mi proyecto principal le gana a todas:

De VB.NET/Pocket PC a Objective-c/iPhone a Swift a F#/Xamarin y ahora a Rust/Web y de esa luego le agrego otra vez Swit/iOS y luego Kotlin/Android.

Digo esto para que vean que no hay que tenerle miedo a haces reescrituras.

---

Con todo, hay que ponerle algo de cabeza a esto. Lo mas importante es tener un objetivo claro, así sea simple. De ahi:
  • Usa control de versiones, es la columna de todo esto
  • Luego, usa una herramienta para organizar las tareas (como trello o pivotal)
  • Haz mini-experimentos en la nueva herramienta/plataforma, migrando un unico componente a ver que tal

Esto es lo basico, ademas
  • Ten una buena db de respaldo (como postgresql o firebird) ya que necesitas tener un "apoyo" solido. Si refactorizas las consultas/tablas te ahorraras un MONTON de esfuerzo al hacer migraciones
  • Saca un listado de lo mas "dificil" de hacer y de los controles/librerias de terceros indispensables. Asegurate que los puedes resolver en la otra plataforma/nueva version. Pero recuerda que hemos avanzado mas de 1 decada desde delphi 7 y cosas que antes eran indispensables ahora son obsoletas.

Una gracia de delphi es que a pesar de todo, no ha cambiando tanto. Llevo sin programar Delphi unos años... y de pronto tuve que hacer algo en freepascal. Me tomo nada retomar el ritmo.

Así que si sigues en el lenguaje, el cambio es MUCHO mas fácil (mientras por los laditos haces lo de arriba):

Empieza a limpiar, pulir y aclarar el código, quizás aplicando un auto-formater.

Empieza a separar lógica de negocios de la parte UI. Casi todo eso va a pasar limpio a versiones mas modernas de delphi/freepascal. Si lo haces bien, deberías quedar con MENOS código que antes.

De igual manera, refactoriza tu db para simplificar tu lógica de datos.

En el caso que tengas una dependencia fuerte con un componente obsoleto (como BDE) cambia esos primero. Tu db debe estar solida y al ultimo pelo.

Y cómo manejas ambos proyectos a la vez? Si refactorizas lo que tienes, puedes hacerlo todo en un rama del control de codigo fuente!

Una vez hecho los preparativos, el paso es solo tiempo, pero es relativamente facil. Te digo que si uno tiene la logica de negocios clara, incluso pasar de lenguajes no es tan dificil.

Es posible que todo esto parezca "mucho" trabajo, pero realmente es PURA re/organizacion.

Neftali [Germán.Estévez] 09-06-2020 09:42:19

Cita:

Empezado por Dexter182 (Mensaje 537572)
Tengo una aplicación creada en Delphi 7 que uso en mi negocio y que he ido ampliando, haciendo correcciones, etc. desde hace ya varios años y actualmente estoy llegando a un punto en el que creo que estaría "lista".


Yo tengo aplicaciones que compilan en Delphi6 y Delphi 10.3 Rio de forma indistinta con un par de {$IFDEF}.
Depende del código que utilices y sobre todo componentes de terceros que deban estar disponibles en la nueva versión.

Si tu aplicación no usa componentes de terceros y el código es bastante estandard no deberías tener mayores problemas. Otro tema es la Base de datos y componentes de conexión que estés utilizando.
No das muchos detalles en ese sentido, cosas que son importantes para evaluuar la decisión.


Cita:

Empezado por Dexter182 (Mensaje 537572)
Opción 1º) Seguir atado a Delphi 7 y las nuevas funcionalidades que se me ocurran programarlas en el. Es la opción más cómoda y me evitaría los problemas de migrar (estuve leyendo varios hilos en este foro sobre migración desde versiones antiguas de Delphi a versiones más nuevas y parece ser la opción más sensata).

Yo soy de los que piensa que si la migración es "viable", hay que ir actualizandose dentro de las posibilidades.


Cita:

Empezado por Dexter182 (Mensaje 537572)
Opción 4º) No se si es posible, pero me gustaría poder crear las nuevas funcionalidades en el nuevo entorno e integrarlas al sistema viejo, no como un programa aparte si no llamándolas desde el programa viejo.


No comentas nada de la estructura de tu aplicación y del volumen que tiene.
No es lo mismo migrar una aplicación con 20 formularios que con 200.

Puedes extraer código a DLLs o BPLs de forma paulatina. Posteriormente ir migrando la interficie a una nueva versión, mientras comporates código que has extraído.


Muchas opciones, y no hay ninguna que sirva para todos los casos.

Dexter182 09-06-2020 19:00:38

¡Muchísimas gracias a los 3! v:-)v

Sus consejos y experiencias me sirven muchísimo!!!
Y me dan ánimos de meterle ganas a la migración. :)

Voy contestando:

Cita:

Empezado por MAXIUM (Mensaje 537573)
- Por otra parte, Lazarus no es tan compatible en librerías y proyectos al migrar desde Delphi.

OK. Lo tendré en cuenta.

Cita:

Empezado por MAXIUM (Mensaje 537573)
- Delphi Community no es tan gratis. Creo que la licencia la puedes usar por 1 año y luego renovarla hasta quién sabe cuando. Esa incertidumbre no me gusta.

También he pensado eso. Creería que siempre va a existir una versión Community o que al menos me dejarán seguir usando la que bajé.
Pero si, es algo que podría cambiar y no estaría bueno.

Cita:

Empezado por mamcx (Mensaje 537574)
Quedarse obsoleto no tiene sentido.
Digo esto para que vean que no hay que tenerle miedo a haces reescrituras.

¡Gracias por los consejos!

Cita:

Empezado por mamcx (Mensaje 537574)
Haz mini-experimentos en la nueva herramienta/plataforma, migrando un unico componente a ver que tal

Esa era la idea. Ir haciendo el cambio de a poco, pero tendré muy en cuenta esto.

Cita:

Empezado por mamcx (Mensaje 537574)
Empieza a limpiar, pulir y aclarar el código, quizás aplicando un auto-formater.

Me falta mucho por hacer, pero algo de eso ya he empezado a hacer en Delphi 7.
La migración también puede ser una buena excusa para mejorar aún más eso.

Cita:

Empezado por mamcx (Mensaje 537574)
Empieza a separar lógica de negocios de la parte UI. Casi todo eso va a pasar limpio a versiones mas modernas de delphi/freepascal. Si lo haces bien, deberías quedar con MENOS código que antes.

Esto no lo he echo y no se muy bien por dónde debería arrancar.
¿Algún artículo o libro que me aconsejes sobre el tema?

Cita:

Empezado por mamcx (Mensaje 537574)
De igual manera, refactoriza tu db para simplificar tu lógica de datos.

Y cómo manejas ambos proyectos a la vez? Si refactorizas lo que tienes, puedes hacerlo todo en un rama del control de codigo fuente!

¿A que te refieres con refactorizar mi bd y mi código fuente?

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 537575)
Si tu aplicación no usa componentes de terceros y el código es bastante estandard no deberías tener mayores problemas. Otro tema es la Base de datos y componentes de conexión que estés utilizando.
No das muchos detalles en ese sentido, cosas que son importantes para evaluuar la decisión.

Por suerte tengo sólo 2 componentes de 3 terceros en un sólo form, que los puedo reemplazar fácil porque no son indispensables.
Tendría que ver el tema de los reportes (usaba Rave) pero ya estuve leyendo en este foro sobre alternativas.
La Base de datos es Access y accedo a ella a través de ADO.

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 537575)
No comentas nada de la estructura de tu aplicación y del volumen que tiene.
No es lo mismo migrar una aplicación con 20 formularios que con 200.

Los forms importantes deben ser menos de 20. Y en total no creo que llegue a los 30 forms.

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 537575)
Puedes extraer código a DLLs o BPLs de forma paulatina. Posteriormente ir migrando la interficie a una nueva versión, mientras comporates código que has extraído.

Esto me interesó mucho. ¿Esas BPLs las puedo ir desarrollando en Lazarus o los Delphi nuevos y llamarlas desde Delphi 7?.
Me pondré a investigar sobre el tema.


Vuelvo a agradecer todos los consejos.
Los aprecio muchísimo, ya que yo programo por hobby.

Porque la verdad que sería más fácil comprarme un programa y listo.
Pero nada más lindo que poder modificar y actualizar el programa que uso todos los días.


Saludos!!! ^\||/

mamcx 10-06-2020 18:14:05

Cita:

Empezado por Dexter182 (Mensaje 537582)
Esto me interesó mucho. ¿Esas BPLs las puedo ir desarrollando en Lazarus o los Delphi nuevos y llamarlas desde Delphi 7?.

Las BPLs son muy espcificas no solo de delphi sino de su version. Asi que superficialmente, no. Sin embargo, notaras como un monton de componentes se pueden instalar en multiples versiones de Delphi/Freepascal.

Como?

Hace una BPLs por version y desde cada una referencia el codigo compartido. Algo asi como:

Código Delphi [-]
my_lib.pas
my_lib.D7.bpl
my_lib.D2017.bpl
my_lib.FPascal..??? //no me acuerdo como lo hacen en FP!

Asi que a la final es un feliz si :)

Cita:

Empezado por Dexter182 (Mensaje 537582)
La Base de datos es Access y accedo a ella a través de ADO.

Esto es lo que migraría primero. Cambiate a Firebird, PostgreSQL o Sqlite. No solo son MUCHO mejor DBs, sino que ademas te abren el mundo a correr parte del proyecto en la nube/linux y si es sqlite ios/android. Afortunadamente lo limitado de access hace facil la propuesta, no deberias tener mucho codigo propietario problematico.

Ahora bien, puedes no migrar tu proyecto actual y solo hacerlo en el nuevo, que es mejor en cuanto a que no te estresas justo ahora.

Cita:

Empezado por Dexter182 (Mensaje 537582)
Esto no lo he echo y no se muy bien por dónde debería arrancar.
¿Algún artículo o libro que me aconsejes sobre el tema?
¿A que te refieres con refactorizar mi bd y mi código fuente?


El libro mas recomendado para este tema es https://www.amazon.com/Working-Effec.../dp/0131177052.

Pero en general es muy simple. En el caso de Delphi siendo un lenguaje OO mira los principios de SOLID:

https://es.wikipedia.org/wiki/SOLID

Deberias al menos tener un "2 niveles" logico, en vez de combinar strings y armar sql en todos lados, deberias tener una unica clase (o conjunto cerrado) como

Código Delphi [-]
//Antes
dataset.sql = "" //armando sql a lo bestia
dataset.open

//Despues

//Logica datos y sql solamente....
TDatos.listado(sql:String ..) //clase generica datos

TClientes.lista_clientes(...) //clase concreta
begin
   TDatos.listado(...)
end

//formas o unit testing o controlador web o lo que sea!
dataset = TClientes.lista_clientes(...)

Investiga sobre el tema de refactorizacion y hacer codigo testeable. Si tu codigo se puede testear sin problemas, al 100% que esta bien separado.

Dexter182 11-06-2020 01:23:06

Cita:

Empezado por mamcx (Mensaje 537583)
en vez de combinar strings y armar sql en todos lados

Este... bueno, creo que tengo bastante trabajo por hacer. :D

Cita:

Empezado por mamcx (Mensaje 537583)
Investiga sobre el tema de refactorizacion y hacer codigo testeable. Si tu codigo se puede testear sin problemas, al 100% que esta bien separado.

OK. Muchas gracias!
El link que me pasaste de Amazon me sugirió dos libros más que también tienen muy buena pinta:
- Clean Code (Robert C. Martin)
- Refactoring: Improving the Design of Existing Code (Martin Fowler)

Agradezco muchísimo la información que me han pasado. ^\||/^\||/^\||/

Voy a empezar por leer y hacer apuntes de las cosas tengo que corregir.

Luego empezaré de a poco a hacer la migración y las pruebas (una vez que tenga más en claro por dónde arrancar).
De momento este hilo me ha dado muchísimas ideas. :)

Saludos y nuevamente gracias!!!!! ^\||/^\||/^\||/

Neftali [Germán.Estévez] 11-06-2020 09:16:18

Cita:

Empezado por Dexter182 (Mensaje 537582)
Por suerte tengo sólo 2 componentes de 3 terceros en un sólo form, que los puedo reemplazar fácil porque no son indispensables.
Tendría que ver el tema de los reportes (usaba Rave) pero ya estuve leyendo en este foro sobre alternativas.
La Base de datos es Access y accedo a ella a través de ADO.



En ese caso yo haría una pruebas (puedes usar la versión Community), porque a lo mejor te llevas una sorpresa y la migración es más sencilla de lo que te esperas.
Las nuevas versiones incluyen ADO, así que por ahí no tendrás problemas. Deshabilita la parte de Rave y revisa los 2 o 3 componentes (si compilan, si hay versión nueva o si puedes deshabilitarlos), porque a lo mejor consigues migrar con poco trabajo.
Yo tengo proyectos que compilan sin cambios en Delphi6 hasta Delphi 10.3 Rio.

Al menos te dará una idea de lo que te puede costar.


Luego si realmente lo migras, ya puedes cambiar a FireDAC, tal y como comenta [mamcx], aunque para programas pequeños, yo he usado ADO+Jet y no funciona mal. Si necesitas más rendimiento si que debes plantearte ir hacia un SGBD "serio".


Cita:

Empezado por Dexter182 (Mensaje 537582)
Los forms importantes deben ser menos de 20. Y en total no creo que llegue a los 30 forms.


Pues si no usas componentes de terceros y "cosas externas", deberías poder abrirlos en nuevas verisones sin problemas. Y si tienes que hacer algún cambio tampoco son muchos.



Cita:

Empezado por Dexter182 (Mensaje 537582)
Esto me interesó mucho. ¿Esas BPLs las puedo ir desarrollando en Lazarus o los Delphi nuevos y llamarlas desde Delphi 7?.
Me pondré a investigar sobre el tema.


La respuesta tal y como comenta [mamcx] es que NO puedes llamar a una BPL hecha en Delphi 10.3 desde un ejecutable hecho en D6. Al menos con las ventajas de ua BPL. Si ese es el caso, deberías usar DLL's.
Tal vez no me expliqué bien.

mamcx 11-06-2020 16:22:39

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 537585)
La respuesta tal y como comenta [mamcx] es que NO puedes llamar a una BPL hecha en Delphi 10.3 desde un ejecutable hecho en D6. Al menos con las ventajas de ua BPL. Si ese es el caso, deberías usar DLL's.
Tal vez no me expliqué bien.

No, lo que dije es que para que se pueda, debes crear un proyecto BPL por CADA version que quieres compilar (uno para 7, otro para 2007, etc) y el codigo compartido lo linkeas en cada uno de los proyectos. Notaras que asi lo hacen las librerias de componentes (y probablemente usando compilacion condicional para ajustes)

Dexter182 11-06-2020 18:23:18

¡¡¡Muchas gracias Germán y mamcx!!! ||-||

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 537585)
En ese caso yo haría una pruebas (puedes usar la versión Community), porque a lo mejor te llevas una sorpresa y la migración es más sencilla de lo que te esperas.

Si, voy a esperar a que salga la nueva versión de la Community y voy a probar a hacer eso como para tener un panorama de los problemas que pueda tener.

De mientras voy ganando tiempo leyendo y haciendo borradores de ideas en papel.
Ayer ya empecé con eso. Me puse ansioso. :D

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 537585)
Luego si realmente lo migras, ya puedes cambiar a FireDAC, tal y como comenta [mamcx], aunque para programas pequeños, yo he usado ADO+Jet y no funciona mal. Si necesitas más rendimiento si que debes plantearte ir hacia un SGBD "serio".

Si compila, creo que al principio dejaré ADO.
Aprovecharé la migración para hacer "limpieza" y una vez que tenga todo más prolijo estudiaré bien el tema de cambiar de BD.
Aparte de FireDAC me interesó mucho lo de SQLite.

Con el tema de las DLL/BPL, quizás sería mejor pasar a BPL las cosas de Delphi 7 que no tenga en Delphi 10.
Creo que pasaré a BPL la parte de RAVE, que no es mucha y es la parte más engorrosa del programa.

Saludos y mil gracias de nuevo!!!! ^\||/^\||/^\||/

Casimiro Notevi 11-06-2020 20:41:39

Cita:

Empezado por Dexter182 (Mensaje 537587)
Aparte de FireDAC me interesó mucho lo de SQLite.

Si va a ser multiusuario, sqlite no es la mejor opción.

Dexter182 11-06-2020 20:46:38

Muchas gracias Casimiro!
Cita:

Empezado por Casimiro Notevi (Mensaje 537588)
Si va a ser multiusuario, sqlite no es la mejor opción.

De momento, al programa lo uso yo solo, pero no está de más saber esto.


Saludos! ^\||/^\||/^\||/

mamcx 11-06-2020 23:17:58

Cita:

Empezado por Casimiro Notevi (Mensaje 537588)
Si va a ser multiusuario, sqlite no es la mejor opción.

No desde hace varias versiones: https://sqlite.org/threadsafe.html.

Y el "problema" no es tan multiples usuarios sino múltiples hilos/programas.

Ahora, si estamos hablando de MUCHISIMOS usuarios hay si no es tan bueno :)

Casimiro Notevi 11-06-2020 23:26:20

Sí, tengo hecho proyectos Android con Sqlite en modo multiusuario y están funcionando perfectamente.
Pero para eso es mejor usar Firebird o PostgreSql, como bien sabes.

Neftali [Germán.Estévez] 12-06-2020 08:05:46

Cita:

Empezado por mamcx (Mensaje 537586)
No, lo que dije es que para que se pueda, debes crear un proyecto BPL por CADA version que quieres compilar (uno para 7, otro para 2007, etc) y el codigo compartido lo linkeas en cada uno de los proyectos. Notaras que asi lo hacen las librerias de componentes (y probablemente usando compilacion condicional para ajustes)


Lo se y eso quería decir (parece que en este hilo me estoy explicando fatal). :(:(:(

Neftali [Germán.Estévez] 12-06-2020 08:08:42

Cita:

Empezado por Dexter182 (Mensaje 537587)
Si, voy a esperar a que salga la nueva versión de la Community y voy a probar a hacer eso como para tener un panorama de los problemas que pueda tener.


La nueva versión Community es posible que tarde unos meses.
Puedes descargar la actual, empezar con la pruebas, y cuando salga la nueva, compilará seguro sin problemas, lo que estés haciendo con la 10.3.

Dexter182 12-06-2020 13:57:38

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 537600)
La nueva versión Community es posible que tarde unos meses.
Puedes descargar la actual, empezar con la pruebas, y cuando salga la nueva, compilará seguro sin problemas, lo que estés haciendo con la 10.3.

OK Germán. Gracias.
Entonces el fin de semana me bajo la actual para ir probando y de paso les cuento como me fue.
Saludos! ||-||

Dexter182 19-06-2020 23:19:45

Buenas!

Quería decirles que estuve jugando con Delphi Community y el programa compila sin hacer prácticamente ningún cambio (solo quitando la parte de los reportes y los componentes de terceros). :)
Obviamente que habría que probar exhaustivamente todo para estar seguro, pero que compile ya es una buena noticia.
Me hace algunos defectos estéticos que luego iré viendo como acomodo (algunos son detalles tontos; por ejemplo en los DbGrid y StringGrid lo solucioné con el DrawingStyle en "gdsClassic").

En Lazarus no tuve tanta suerte. Tendría que hacer muchos cambios para que al menos compile.
Igualmente cuando terminé la limpieza del código voy a intentarlo de nuevo.

PD: Que lindo que es el StringGrid que trae Lazarus. Tiene prácticamente todo lo que he tenido que buscar en componentes de terceros. ¿Por que Delphi prácticamente no ha agregado características a este componente?. :(


Saludos! ^\||/^\||/^\||/

MAXIUM 19-06-2020 23:33:12

Cita:

Empezado por Dexter182 (Mensaje 537705)
B
PD: Que lindo que es el StringGrid que trae Lazarus. Tiene prácticamente todo lo que he tenido que buscar en componentes de terceros. ¿Por que Delphi prácticamente no ha agregado características a este componente?. :(

Hay un Grid espectacular Delphi 7. Y gratis http://www.bergsoft.net/en-us/downloads

Dexter182 19-06-2020 23:40:02

Gracias MAXIUM! ^\||/^\||/^\||/

Lo probaré. Ahora estoy usando este: http://users.otenet.gr/~tsoyran/THyperGrid.htm

Saludos! ^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 07:51:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi