» »

[c++] Active record knižnjica

[c++] Active record knižnjica

zhigatsey ::

Živjo,

V prostem času sem spisal preprosto orm oz. active record knižnjico za c++, ki je prenosljiva,
podpira na različne tipe podatkovnih baz in s katero lahko uporabimo poljubne podatkovne tipe (specializacija ValueTraits tamplate-a).
Podpira tudi boost::optional, s katerim simuliramo null vrednosti. Zaenkrat podpira sqlite, mysql in postgres,
v prihodnosti pa mislim dodati podporo še za oracle. Kot build sistem sem uporabil Gnu autotools, za prevajanje na oknih je
zraven tudi visual studio projekt. Zgledoval sem se po že obstoječih rešitvah (hiberlite, wt::dbo, castle activerecord, ror activerecord, ipd...),
tako da je ta nekakšna mešanica vseh teh...

Knižnjica se nahaja na naslovu http://sourceforge.net/projects/arpp/, kjer lahko pobrskate po kodi.
Priložen je tudi example programček, kjer se vidi kako se knižnjico uporablja oz. kaj zaenkrat lahko zmore.
Zaenkrat bolj skromno dokumentacijo se lahko generira z doxygen-om...

Rad bi vas vprašal kaj bi bilo še smiselno podpreti. Kot prvo bi rad podprl kreiranje podatkovne baze
in tabel na podlagi spisanih active record razredov. To niti ni problem, v "persist" metodi bi moral sicer
dodati še možnost definiranja foreign, unique key-ev, indexov... Nimam pa ideje kako bi naredil upgrade podatkovne
baze oz tabel (alter). Mogoče s kašnimi pomožnimi tabelami v kateri bi bili podatki o trenutnih tabelah in poljih v njih,
iz katerih bi izluščil razlike med activerecord razredi in obstoječo bazo ter kreiral alterje...

Druga stvar pa je možnost "kompozicije" active record razredov. Npr. običajen primer je da imamo blog in
v njem več postov. Kreiramo active record razred Blog in Post. V razredu Blog pa bi imeli radi tudi
listo njegovih postov. Naredili bi recimo takole:

class Blog : public AciveRecordBase<Blog>
{
public:
    int blogId;
    Post::List posts;

    template<class Action>
    void persist( Action& a )
    {
        field( a, blogId, "BLOGID", 0, NotNull | PrimaryKey | AutoInc );
        hasMany( a, posts, blogId, )...
    }
};


Na ta način bi se za določen blog samodejno ali po potrebi naložila tudi lista vseh njegovih postov. To je samo
ena od možnosti (1-n, n-n, 1-1 relacije...) oz. hasMany, belongsTo... itd.. Sicer se mi ta stvar ne zdi ravno najbolj uporabna,
saj ne vem zakaj bi tlačil vse v en razred, ko pa se listo postov za določen blog enostavno da dobiti z uporabo razreda Criteria.
No ja vsaj v dosedanjih iskušnjah nisem še nikoli naenkrat rabil npr. osebe z vsemi naslovi, kontatki, trr-ji naenkrat... Kakšno je
vaše mnenje glede tega, kar se mene tiče ne vidim primera, da bi to res potreboval.

Bi bilo dobro še kakšen drug feature dodati...?

Knižnjica je še v fazi razvoja, kakšne zadeve je potrebno še poflikati in stestirati...

Hvala za nasvete


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

a tudi vam ne dela stran slo-filesharing (strani: 1 2 3 4 )

Oddelek: Loža
16827770 (6633) Gr8t
»

SQL/DML stavki

Oddelek: Šola
343301 (2643) IL_DIAVOLO
»

PHP ASP

Oddelek: Izdelava spletišč
353013 (2338) MrBrdo
»

[c++] Orm... ActiveRecord pattern ... nasvet

Oddelek: Programiranje
51108 (984) zhigatsey
»

[Zend Framework, PHP5] Zend_Db

Oddelek: Izdelava spletišč
161833 (1620) rokpok

Več podobnih tem