views:

231

answers:

4

Not sure what happened to Bold/Eco during the Borland/Codegear/Embarcadero transition but I sure miss it in the newer versions of Delphi. Anyone know of a framework that comes close?

If not, maybe you could suggest a combination of libraries and components that comes close.

+2  A: 

hcOPF seems to be the only real ORM for Delphi win32, but it does not yet come close.

For UML modelling and such for Delphi win32(or C#), I recommend Model Maker.

Both tools have Delphi 2010 support.

--jeroen

Jeroen Pluimers
The death of BOLD was unfortunate, it was dropped I believe because ECO replaced it, and ECO died when Delphi.net died. Maybe ECO could become a possible future technology when you're using Delphi Prism though.
Warren P
Actually, ECO didn't die: it got developed for both C#, Delphi.NET, and Delphi Prism. So you can still use it, but only in .NET projects. (http://capableobjects.com/apps/InstantForum414/Topic4219-4-1.aspx)
Jeroen Pluimers
+1  A: 

The alternatives are list of OPFs for Delphi win32 (with a short description for each one).

I have only ever used Bold for Delphi (and still do) but I don't think any of the alternatives come even close in the feature set. And that I suppose is the key, which features are important to you ? If you don't need everything Bold provides maybe you can settle on one of the alternatives.

Alternatively, you can still use Bold, the latest release is Bold for Delphi 2006 and hope that Embarcadero eventually open sources it, or continues development. There is a constant user pressure to do something with Bold, but Embarcadero seems to handle pressure well.

Daniel Maurić
+1  A: 

I've developed an ORM RESTful JSON based framework, using SQlite3 for its database persistence.

It's not so complete than Bold or OPF, of course (no UML nor OCL), but it works, and is tested with Delphi 7 up to Delphi 2010. And it's still maintained, and will be forever, because it's free and opensource.

You've interesting features like integrated User Interface generation and i18n, reporting and export to PDF, client/server services, integrated unit testing. It uses JSON for data transmission, and a RESTful architecture over in-process communication, windows GDI messages, named pipes, or HTTP/1.1. So it could be used for developing AJAX applications.

This framework integrates gracefully with our SynProject tool, which creates documentation from the source code, with nice graphs and complete document traceability (it has been used to fulfill IEC 62304 requirements for a medical SW we wrote with this framework). So you don't have UML, but you have documentation and diagrams available at hand.

If you're interested in ORM and Delphi, you're welcome joining the adventure of Open Source! http://blog.synopse.info/category/Open-Source-Projects/SQLite3-Framework

A.Bouchez
If you don't want a full framework, you can use:1. basic serialization of your object (using TReader/TWriter or ObjectBinaryToText/WriteComponent and ObjectTextToBinary/ReadComponent);2. some direct conversion to text, using for example our WriteObject() ReadObject() properties in SQlite3Commons.pas of our framework.
A.Bouchez
+2  A: 

This is One of the bigger lack in the today's Delphi. Having only an old TDataset paradigm is not enough for complex projects. Write a simple active record in Delphi 2010 is not difficult. But for complex project you need some datamapper with extermal config file. I'm writing a simple Hibernate for Delphi (DORM aka Delphi Object Relational Mapper). If someone want to partecipate send an email to d dot teti at bitTime dot it.

eg. following is a unit test for DORM

procedure TTestDORM.TestUpdate;
var
  p: TPersona;  //TPersona is a PODO "Plain Old Delphi Object" TObject descendat
  guid: string;
begin
  p := TPersona.Create;
  p.Nome := 'Daniele';
  p.Cognome := 'Teti';
  p.Eta := 30;
  p.DataDiNascita := EncodeDate(1979,11,04);
  Session.Save(p);  //DORM do an INSERT
  guid := p.guid;
  Session.Commit;
  Session.StartTransaction;
  p := Session.Load(TypeInfo(TPersona), guid) as TPersona; //DORM do a SELECT
  p.Nome := 'Peter';
  Session.Save(p); //DORM do an UPDATE
  Session.Commit;
  CheckEquals(1, Session.Count(TPersona));
  p := Session.Load(TypeInfo(TPersona), guid) as TPersona;  //DORM do a SELECT
  CheckEquals('Peter', p.Nome);
end;

Someone interested?

Daniele Teti