Christopher Wright pisze:
Marcin Kuszczak wrote:
...
My db access layer solves above problems.

You have me drooling in anticipation.

Well, this solution works and really solves above mentioned problems for me. I use it with real application and it works great.

But indeed it really might be too strong statement, at least at the current stage of development.


How does it work?

1. First it is necessary to define database schema. For this purpose I use special classes derived from IColumn. In this case it would be IDbTypedColumn. When defining database schema I define types of columns, and also constraints for db column. In D it is possible to generate schema classes from schema definition file on compile time, and in fact it is already working in my project Doost (see: db package).

public DbTypedColumn<Integer> id = new DbTypedColumn<Integer>("id", visitcards, new Integer[0], new DbConstraints().primaryKey());

From this, it looks like this would be a good base for anyone wanting to build an ORM package -- it'd mainly leave translation between objects and columns.

2. Column defined in db schema are used when defining queries to database. Because column definitions are typed, it is also possible to check types of arguments when defining queries.

Script script = Create(vcards_db.instance()).IfNotExists();
Query query = Select(visitcards).Where(Equals(visitcards.id, 5));

Hm. Fluent interfaces are good. Domain-specific languages can be easier to work with, but they take a lot more effort to create and maintain.

If you or someone else wanted to help in such a framework (I will use probably BSD license) I will put code somewhere, so it will be possible to work on it together. In such a case please drop me an email. First thing to do is to rethink architecture and found even better ways of doing things... :-)

I'm quite interested in this. I might have time to help out, but I'm not going to make any offers I might not be able to fulfill.

That's fair enough.

I will prepare sources and put them somewhere and then give announcement here. But it can take some time, as I am quite busy currently...

Best Regards
Marcin Kuszczak

Reply via email to