Blog

All Blog Posts  |  Next Post  |  Previous Post

Curso Rápido de TMS Aurelius - Primeros pasos

Tuesday, February 26, 2013

Aunque TMS Aurelius tiene una extensiva documentación, muchas veces recibimos pedidos de más ejemplos, explicaciones, y códigos fuente sobre como realizar determinadas tareas. Así que iniciaremos aquí una serie de posts sobre como utilizar TMS Aurelius. Todo lo que expondremos aquí está también cubierto en la documentación, pero en este blog nos centraremos en más en casos de uso reales que en cubrir cada característica específica. En resumen, una forma alternativa de mostrar como utilizarlo.

Comenzando por el principio, mostraremos una aplicación mínima que utiliza TMS Aurelius. Supongamos que tenemos una clase de tipo TCustomer (cliente) mapeada de la siguiente manera:
unit Customer;
interface
uses
  Aurelius.Mapping.Attributes;

type
  [Entity, Automapping]
  TCustomer = class
  private
    FId: integer;
    FName: string;
  public
    property Id: integer read FId write FId;
    property Name: string read FName write FName;
  end;

implementation
end.
El código a continuación podría utilizarse para grabar la instancia de un cliente (TCustomer) en una base de datos SQLite: (Los bloques try/finally han sido removidos para simplificar)
program GettingStarted;

{$APPTYPE CONSOLE}

uses
  Aurelius.Drivers.Interfaces,
  Aurelius.Drivers.SQLite,
  Aurelius.Engine.DatabaseManager,
  Aurelius.Engine.ObjectManager,
  Aurelius.SQL.SQLite,
  Customer;

var
  Connection: IDBConnection;
  Manager: TObjectManager;
  Customer: TCustomer;
begin
  Connection := TSQLiteNativeConnectionAdapter.Create('test.db');
  Manager := TObjectManager.Create(Connection);
  Customer := TCustomer.Create;
  Customer.Name := 'First customer';
  Manager.Save(Customer);
  Manager.Free;
  WriteLn('Customer saved.');
  ReadLn;
end.
La idea aquí es mostrar lo mínimo necesario para utilizar Aurelius. Lo que necesitamos es:

1. Una clase para persistir. En éste ejemplo, es la clase TCustomer

2. Un mapeado entre la clase y la base de datos. Esto se hace mediante los atributos [Entity] and [Automapping]. En este caso las propiedades son mapeadas automáticamente a los campos de la tabla, pero podríamos definir un mapeado personalizado si así lo quisiéramos. A las instancias de objetos creados por Aurelius las llamaremos "Entidades".

3. Una conexión a la base de datos. En el ejemplo es la variable Connection, que implementa la interfaz "IDBConnection". Aquí nos estamos conectando a una base de datos local SQLite, y para ello necesitamos utilizar el adapter TSQLiteNativeConnectionAdapter. O sea, siempre necesitaremos un adapter que haga de puente entre el "mundo" de la base de datos relacional y el "mundo" de los objetos en el programa. En Windows es necesario asegurarse que la dll sqlite3.dll está en una carpeta donde Windows pueda encontrarla. En OSX e iOS, SQLite es parte del sistema operativo.

4. Un "Object Manager" (administrador de objetos) para grabar y administrar las entidades. La segunda línea de código en el ejemplo anterior crea un object manager, que se encarga de grabar los objetos en la base de datos especificada por la interfaz IDBConnection.

Finalmente, el código simplemente crea una instancia del objeto TCustomer, llena sus propiedades, y lo graba en la base de datos. ¡Esta es su primer aplicación con TMS Aurelius!

Un dato adicional: Si el archivo test.db (nuestra base de datos) no existiera, Aurelius lo crearía por usted. Si usted desea decirle explícitamente a Aurelius que cree la base de datos, eso se podría haced con el siguiente código:
procedure CreateDatabase(Connection: IDBConnection);
var
  DBManager: TDatabaseManager;
begin
  DBManager := TDatabaseManager.Create(Connection);
  DBManager.BuildDatabase;
  DBManager.Free;
end;
Esto creará el archivo de base de datos y sus correspondientes tablas. (En este caso, "Customer")

Wagner Landgraf




This blog post has not received any comments yet.



Add a new comment

You will receive a confirmation mail with a link to validate your comment, please use a valid email address.
All fields are required.



All Blog Posts  |  Next Post  |  Previous Post