[std.database]

Johann MacDonagh johann.macdonagh.no at spam.gmail.com
Mon Oct 10 19:53:30 PDT 2011


On 10/9/2011 2:22 PM, Andrei Alexandrescu wrote:
> On 10/9/11 11:54 AM, Adam Ruppe wrote:
>> The way I'd do it is:
>>
>> interface Database {
>> // support shared functions here, and other stuff useful enough to
>> // warrant emulation
>> }
>>
>> class Postgres : Database {
>> // implement the interface, of course, but also all other postgres
>> // specific stuff
>> }
>>
>>
>> When you go to use it, if you're happy with the basics, declare
>> Databases.
>>
>> If you need something special, use Postgres objects.
>
> Makes sense. JDBC does that, too.
>
> Andrei

Maybe "Database" should be an abstract class rather than an interface? 
That's how ADO.net does it:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx

This is architecturally a little "cleaner", because whatever Postgres 
database class we have is a "database" class at heart, not a class that 
implements a database interface.

Also, perhaps some actual code that would exist in the abstract class 
would be a call to Close() in the destructor. That way you can declare a 
database connection on the stack, open it, do some stuff, allow it to 
leave scope, and clean up that resource without a timeout on the server end.


More information about the Digitalmars-d mailing list