Hello Franck,
I think that as part of 3.0 we should consider splitting SimpleOrm
into two pieces, each in their own Jars.
simpleorm.records that contains SRecordMeta, SRecordInstance, SField*
simpleorm.database that contains SQuery, SDriver*, SConnection.
The record part should have zero dependency on the database part, and
should be compiled and built into its own jar, with some test cases of its own.
The database part should depend on the records part, obviously.
When working detached, one should only need the .records jar.
This is actually not that hard to do. I have already decoupled
SQuery from SRecordMeta. A similar trick can be used to decouple
findOrCreate and friends. And the only other substantial connection
is where SReferenceField.getRawValue can do a lazy read.
For findOrCreate, the API becomes slightly messier:-
SFinder empf<Employee> = new SFinder(Employee.meta);
Employee e = empf.findOrCreate("123");
or simply but slightly less efficiently
Employee e = new SFinder(Employee.meta).findOrCreate("123");
(The finder would cache the sets of different types of fields etc.)
vs old
Employee e = Employee.meta.findOrCreate("123");
For the SFieldReference.get the call would become
SFinder deptf<Department> = new SFinder(Department.meta);
Department dept = deptf.getReference(myEmp, DEPT);(
(For the detached case, no query:-)
Department dept = myEmp.getUnqueriedReference(DEPT);
One could, of course, give SRecordMeta a default finder, defined
through an interface in .SRecord, and then keep the existing
API. But being explicit makes the structure clear.
I have also attached some other prototyping that I was doing in
SimpleData (it is checked in). But I now think that splitting
SimpleOrm is a much better idea, and SimpeData should be
abandoned. I think that this change is actually very good, and would
lead naturally to DataSets if we wanted to go there later.
My current task is to work on the white paper etc. I would not want
to start any split until you have caught up with the current changes
and your application works 100%. (Although I might be tempted to do
some of the internal rearrangement, moving code from SRecordMeta to SFinder.)
One way or the other I am hoping to make your branch the trunk this week.
What do you think?
Anthony
Dr Anthony Berglas, anthony@... Mobile: +61 4 4838 8874
Just because it is possible to push twigs along the ground with ones nose
does not necessarily mean that is the best way to collect firewood.