Jumat, 16 September 2011

target pembaca : Advance

Masih tetap berambisi bikin opf/orm framework sendiri cari referensi sana sini,bahkan sampai 2 kali redesign , sekarang saya sudah cukup yakin dengan designnya.
Sekarang hade-framework sudah mampu menjalankan tugas dasarnya :D mari saya contohkan penggunaannya.

- Pertama yang anda lakukan adalah membuat Bussines Objectnya yang merupakan turunan dari THadeObject

uses
   hadeobject;
Type
  TTest = class(THadeObject)
  private
   FAge: integer;
   FLName: string;
   FName: string;
  public
   function Full_Name : String;
  published
   property First_Name: string read FName write FName;
   property Last_Name: string read FLName write FLName;
   property Age: integer read FAge write FAge;
  end;


Property yang ingin di mapping harus berada pada published section, property yang berada pada published section juga tidak harus di mapping ke schema database.
semisal anda hanya ingin First_Name dan Last_Name saja yang di mapping anda tidak perlu meremove property Age.

- Langkah berikutnya adalah melakukan Register Mapping ( uses unit hademapping ).

    GHadeMappingManager.RegisterMapping(TTest, 'person', 'OID', 'oid',
      ftInteger, 0, [ptkPK, ptkReadOnly]);

    GHadeMappingManager.RegisterMapping(TTest, 'person', 'Name',
      'first_name', ftVarchar, 25);

    GHadeMappingManager.RegisterMapping(TTest, 'person', 'Age', 'age', ftInteger);

    GHadeMappingManager.RegisterMapping(TTest, 'person', 'Last_Name',
      'last_name', ftVarchar, 25);


GHadeMappingManager adalah singleton function lebih detil bisa dilihat hademappingmanager.pas
interface dari RegisterMapping adalah

procedure RegisterMapping(const AObjClass: THadeObjectClass;
      const ATable, APropName, AColName: string; const AFieldType: THadeFieldType;
      const ALength: integer = 0; const ASetPtkInfo: TSetPtkInfo = []);


- Selanjutnya Register Connection ( uses unit hadeopfmanager,hadebroker )

    GHadeOPFManager.RegisterConnection('test', 'test.s3db',
      '', '', '', SQLDB_SQLITE);
    GHadeOPFManager.OIDStrategy := oidAutoInc;

code diatas berarti "Registrasikan koneksi dengan nama 'test' , 'nama DB','Host','username','password' dengan menggunakan broker SQLLite"

anda bisa mempunyai lebih dari satu koneksi dalam satu applikasi :D .
OIDStrategy := oidAutoInc berarti anda menggunakan PK(Primary Key) dengan strategy AutoIncrement fitur yang tersedia dihampir semua R/DBMS, anda juga bisa menggunakan oidGUID sebagai OIDStrategy, oidGUID menggunakan GUID(Global Unique Identifier) sebagai primary key nya yang disimpan sebagai string.

- Create/Read/Update/Delete Bussines Object
Untuk Melakukan CRUD pada Bussines Object anda harus menggunakan session, mungkin bagi sebagian orang penggunaan session cuma bikin ribet,tetapi sebenarnya penggunaan session sangat powerfull untuk melakukan transaksi,management koneksi dll.

uses
 hadeobject,
 hadeopfmanager,
 hademapping,
 hadession;
//..some code omitted for brevity
var
 MySession : THadeSession;
 obj : TTest;//class TTest yang tadi
begin
 MySession := GHadeSessionFactory('test');//session dengan koneksi 'test'
 obj := TTest.Create(71);//mengeset OID/pk dengan nilai 71
 Try
   MySession.read(obj);//sekarang obj = record di table person dengan OID = 71
   
   //kita update
   obj.First_Name := 'Test Doank';
   obj.MarkDirty;//tandai object ini adalah dirty( kotor dalam artian tidak sama dengan database )  
   MySession.save(obj);//sekarang record dengan OID 71 sudah terupdate.
end. 
untuk melakukan Create(Insert) sangat mudah dan sama seperti operasi update/delete

  //tanpa OID karena oidAutoInc , jika oidGUID tambahkan(uses) unit hadeoid
  //tmp := GHadeOID.getOID.getGUID; dan pass variable tmp ke TTest Constructor
  obj := TTest.create();
  obj.First_Name := 'Test';
  obj.Last_Name := 'Lagi'
  obj.Age := 76;
  MySession.save(obj);//tersimpan

  //untuk Delete cukup tandai object dengan MarkDelete
  obj.MarkDelete();
  MySession.save(obj);// record terhapus

- Transaction
Katakanlah anda mempunyai 2/lebih object yang harus di save(insert/update/delete) yang mana jika salah satu objectnya gagal maka keseluruhan object tersebut harus di rollback.

begin
 MySession.StartTransaction;
 Try
   //save/read operation
 except
   MySession.Rollback;
   //raise again?
 end;
 MySession.Commit;
end.

Session tidak perlu di free secara manual karena THadeSession adalah interface.
anda juga bisa menaruh Session di constructor suatu class dan session akan hidup sepanjang object dari class tersebut hidup.

well tentunya framework ini masih jauh untuk di release saya masih berhati-hati takutnya gagal lagi :D. nanti tak kabarin lagi kalo ada major improvement.

kalo mau ngulik sourcenya bisa di clone di https://github.com/kodok-buncit/hade-framework

Thanks happy coding.

2 comments:

  1. Mas, bisa dibuatkan perbandingan antara OPF yang mas buat dengan InstantObject. Sekarang saya sedang menggunakan InstantObject. Sejauh ini tidak terlalu mengecewakan

    BalasHapus
  2. @bagus prasojo
    gak berani ah, nanti aja kalo udah jadi..

    BalasHapus

Katakan Sesuatu