2010-05-31 24 views
14

Delphi 2010 tiene nuevas características con respecto al RTTI, que leí que facilitará las herramientas ORM y un código mucho más limpio.¿Hay algún nuevo ORM para Delphi 2010?

pero no he encontrado ningún ORM incorporado estas características.

¿Cree que el Embarcadero debe construir una e incluirlo con Delphi

+0

Creo que actualmente no vale la pena para un proveedor para dirigirse exclusivamente D2010 –

+0

@Marco: Delphi 2010 introdujo extendida RTTI cuales es necesario para serializar/deserializar todos los campos de objetos (incluidos los privados y protegidos) y los atributos que son una forma muy poderosa de agregar metadatos a las definiciones de clase. – mjn

+0

Voto para cerrar esta pregunta como fuera de tema porque es una opinión abierta pregunta. –

Respuesta

1

¿Qué es exactamente características que estas hablando?

Hay varios ORM para Delphi: ORM for DELPHI win32

+1

Ninguno de ellos es exclusivo de RTTI de Delphi 2010. –

+0

¿Por qué necesita * ORM exclusivos? –

+1

¿cómo se vería un ORM que admite Delphi 2 hasta 2010? Usaría el mínimo común denominador de las características de idioma disponibles. Por lo tanto, mejor soporte solo para 2010+ y uso RTTI extendido y Atributos en la API ORM, como ORM para .Net y la plataforma Java. – mjn

8

El marco de primavera (que utiliza Delphi 2010 extendió RTTI) tiene un marco de la entidad en su hoja de ruta:

http://code.google.com/p/delphi-spring-framework/ Marco

Delphi primavera es un proyecto de código abierto internacional , cuya misión es proporcionar un marco de infraestructura robusto que ayuda Los desarrolladores de Delphi crean sólidas, empresas flexibles y extensibles bibliotecas de clases y clases basadas en en Embarcadero® Delphi® 2010 para plataforma Win32.

+0

parece prometedor – DelphiDev

8

Otro recién lanzado Delphi 2010+ ORM es DORM. Hace uso de las nuevas funciones de RTTI y puede persistir cualquier objeto Delphi simple.

Tomar tal vez un vistazo a una cliente-servidor ORM como mORMot - que funciona muy bien con Delphi 2010 - el cliente-servidor dimensión es digno de mención en un mundo SOA.

+0

Consulte http://blog.synopse.info/post/2012/07/12/One-ORM-to-rule-them-all para obtener algunos puntos sobre mORMot con respecto a otros ORM existentes. –

3

TMS Aurelius usa las nuevas capacidades de RTTI introducidas en la versión reciente de Delphi. También utiliza genéricos, sobrecarga de operadores y otras características nuevas de Delphi que lo hacen solo compatible con Delphi 2010 en adelante.

4

DORM, Delphi ORM es un nuevo marco ORM OpenSource para Delphi utilizable desde DelphiXE + (debería funcionar también en D2010, pero no está probado en esa versión). Admite (y usa) todas las nuevas funciones de RTTI. Permite mapeo de archivos, atributos y Convención sobre configuración. Hay grandes sistemas de producción basados ​​en eso. Se integrará en Delphi Spring Framework desde la próxima versión principal. Es desarrollado por una pequeña comunidad internacional (6 personas). http://code.google.com/p/delphi-orm/

Para mostrar algunas características básicas, esta es una prueba de unidad realmente utilizada.

procedure TTestDORM.TestCRUD; 
var 
    p1: TPerson; 
    p1asstring: string; 
    id: integer; 
begin 
    p1 := TPerson.NewPerson; 
    try 
    Session.Save(p1); 
    p1asstring := p1.ToString; 
    id := p1.id; 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 

    Session.StartTransaction; 
    p1 := Session.Load<TPerson>(id); 
    try 
    CheckEquals(p1asstring, p1.ToString); 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 

    Session.StartTransaction; 
    p1 := Session.Load<TPerson>(id); 
    try 
    p1.FirstName := 'Scott'; 
    p1.LastName := 'Summer'; 
    p1.Age := 45; 
    p1.BornDate := EncodeDate(1965, 1, 1); 
    Session.Update(p1); 
    p1asstring := p1.ToString; 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 

    Session.StartTransaction; 
    p1 := Session.Load<TPerson>(id); 
    try 
    CheckEquals(p1asstring, p1.ToString); 
    Session.Delete(p1); 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 

    Session.StartTransaction; 
    p1 := Session.Load<TPerson>(id); 
    try 
    CheckNull(p1); 
    Session.Commit; 
    finally 
    p1.Free; 
    end; 
end; 

P.S.Soy el autor principal y director de DORM

+0

También vale la pena decir que también hay pocas bifurcaciones de DORM en el código de google (notablemente el de Robert Love). – menjaraz

+0

@Daniele He citado a DORM en mi respuesta hace algunos meses. :) –

Cuestiones relacionadas