Thursday, 10 September 2009

Migración de proyectos a Delphi 2010


Bueno, ya he empezado a realizar la migración de mis proyectos a Delphi 2010. Es una tarea ardua y difícil pero que de momento estoy muy interesado en hacer gracias a las nuevas novedades que trae éste editor. Estoy realizando la migración de uno de mis proyectos más explicado aquí en el blog y es que estoy muy interesado en la serialización de objetos que éste nuevo editor ofrece gracias al Marshal/UnMarshal mediante JSON. He encontrado varios artículos muy buenos de blogs que sigo donde se explica fabulosamente bien todo éste concepto de serialización utilizando las nuevas librerías DBXJSONReflect y DBXJSON. También he descubierto los nuevos diagramas UML que dispone el Model View, que son mucho más bonitos que los de su antecesor Delphi 2007 y 2009. Cómo podéis ver en las siguientes imagenes, la nueva estructura de la aplicación Thundax Box Manager, ha cambiado un poco para dar paso a un diseño más cómodo y fácil y donde podré hacer todo el tema de la serialización en cuanto resuelva un problema con la clase TPoint, ya que ésta (que es un record) no se puede serializar utilizando JSON, por lo tanto tendré que hacer una clase que derive de TObject.
Aún tengo que mirarme todo el tema de la RTTI que ha cambiado bastante y mirar de resolver algunos problemas sobre mi aplicación.

Aquí os dejo los nuevos diagramas de la aplicación:

Clase TBox:


Clase TLine:


Class Intersector:

Aquí os dejo también el código de la serialización de la clase TVertex utilizando JSON:

uses
  DBXJSONReflect, DBXJSON;

procedure SerializeVertex();
var
  Mar: TJSONMarshal;     // Serializer
  UnMar: TJSONUnMarshal; // UnSerializer
  vertex: Tvertex;
  SerializedVertex: TJSONObject; // Serialized for of object
begin
  Mar := TJSONMarshal.Create(TJSONConverter.Create);
  try
    try
      vertex := Tvertex.Create(10,10);
      SerializedVertex := Mar.Marshal(vertex) as TJSONObject;
    finally
      FreeAndNil(vertex);
    end;
  finally
    Mar.Free;
  end;
  // Output the JSON version of the vertex object
  Memo1.lines.add(SerializedVertex.ToString);
  // UnMarshalling vertex
  UnMar := TJSONUnMarshal.Create;
  try
    vertex := UnMar.UnMarshal(SerializedVertex) as Tvertex;
    try
      Assert(vertex.x = 10);
      Assert(vertex.y = 10);
    finally
      vertex.Free;
    end;
  finally
    UnMar.Free;
  end;
end;


El resultado de la visualización del TMemo, es la siguiente:

En los próximos post empezaré a indagar sobre el tema del RTTI y que cosas nuevas nos dan para poderlas aprovechar al máximo en nuestras aplicaciones.

  • Enlaces de interés:
Database Connectivity.
Custom Marshalling/Unmarshalling in Delphi 2010.

0 comments:

Post a Comment