Thoughts on architecture for the GDA backend

Derek Atkins warlord at MIT.EDU
Mon Dec 17 09:14:59 EST 2007


Hi,

Phil Longstaff <plongstaff at rogers.com> writes:

> Except for a number of bugs (and a lot of testing, and a load/save UI), 
> the GDA backend basically works for the objects outside of the business 
> objects.  I also want to add an audit trail for changes and version 
> support to detect when a db needs to be updated to a newer version.

So we've reached feature-parity with the 1.6 Postgres backend?
Excellent!  Definitely good progress.  What's the time frame to get
the business objects done?

> Some thoughts:
> - the GDA backend pulls the data from the engine objects and builds an 
> INSERT/UPDATE query using the values.  This requires the backend to know 
> what values/types need to be persistent.

In the current GnuCash architecture this is done by having the
backend provide a framework and then having "per-backend object 
plugins" that define this persistence.

> - the GDA backend pushes data from the db into the engine objects using 
> the standard exposed API.  This leads to a commit which is not needed 
> because the data has just been loaded.  There also, occasionally, seems 
> to be some special magic that happens (e.g. convincing the Account to 
> sort/provide the running balance when splits are loaded).

You get around this by performing:

  disable_backend();
  commit();
  enable_backend();

Yes, it's a pain in the butt, but it works.  The idea is to keep
yourself from recursing.

> Proposed solution:
> - convert the rest of the engine objects to be based on GObject

A definite step forward.

> - create a new GObject interface which has methods for 1) getting a 
> dictionary of persistent data for the object 2) getting/setting 
> persistent data.  The goal would be to have the engine object and its 
> class have a bigger role in defining the db table columns in order to 
> better encapsulate persistence information in the engine objects.  The 
> backend would then be required to transfer the persistence information 
> for an object to/from the db or file.
>
> Thoughts?

Do we really need this?  Is the current plug-in framework not
sufficient?  Or do you really believe that you can come up
with an interface that is backend agnostic?  I'd like to see
a design proposal before going along this route, because if it's
not backend agnostic then it's no better than what we currently
have.

> Phil

-derek

-- 
       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
       Member, MIT Student Information Processing Board  (SIPB)
       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
       warlord at MIT.EDU                        PGP key available


More information about the gnucash-devel mailing list