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.
Mas, bisa dibuatkan perbandingan antara OPF yang mas buat dengan InstantObject. Sekarang saya sedang menggunakan InstantObject. Sejauh ini tidak terlalu mengecewakan
BalasHapus@bagus prasojo
BalasHapusgak berani ah, nanti aja kalo udah jadi..