V
Hallo Klaus,
ich habe auch Gerüchte gehört, dass es im September den neuen CBX 2 geben soll, aber ich bin mir nicht sicher, wie verläßlich diese Quellen sind, außerdem ist es noch weit bis September, da kann einiges passieren. Klaus, wenn Du eine sichere Quelle hast, wäre ich Dir dankbar. Jedenfalls denke ich, wir können alle gespannt sein, und wenn es wirklich den 64-bit Compiler gibt, über den seit Monaten getuschelt wird, wäre das ein gigantischer Schritt nach vorne.
Hall beridoxus,
die Entscheidung ist immer noch schwierig, und hängt sicherlich vom Einzelfall ab. Ich würde zum jetzigen Zeitpunkt in einem normalen Entwicklungsprojekt nicht unbedingt den CBX empfehlen, allerdings können gerade im Bereich der Bildverarbeitung die bisherigen Nachteile des CBX nicht so gravierend sein. Wir haben mal ein sehr grafisch, oberflächenlastiges Programmbeispiel für einen Kunden implementiert, in dem erst die VCL verwendet wurde, im anderen Fall dann direkt die Windows- API. Dabei haben wir die Methoden 1:1 umgesetzt, damit das ganze vergleichbar bleibt. Der Unterschied war gewaltig, gerade wenn mit normalen Zeichnungsobjekten gearbeitet wird, ist die VCL ein Nachteil. Hier wird eine, wie auch immer geartete Lösung (sei es nun wxWindows oder API) sicher besser sein.
Aber eigentlich ist die Entscheidung nicht so schwerwiegend, wie sie sich in diesen Diskussionen darstellt. Er trifft sogar den Kern, des Problems, inwieweit mache ich mich vom Framework, und damit von einem Hersteller abhängig. Wir empfehlen unseren Kunden auch bei neuen Projekten noch den BCB6 einzusetzen, aber durch eine saubere Anwendungsarchitektur sicherzustellen, dass der Portierungsaufwand auf jedes andere Framework unter 20% liegt und das geht. Allerdings ist der Aufwand am Anfang etwas höher. Dann habe ich auch in einigen Monaten noch die Freiheit, strategische Entscheidung bezüglich des Compilers und der Plattform zu treffen.
Hier ist der Quelltext einer unserer Funktionen, die ein Listview bestückt, dabei ist es für die Bearbeitungsfunktion uninteressant, ob dahinter die VCL steckt. Genauso gut kann es sich aber auch um eine Implementierung eines StringGrids handeln, für die Business- Prozess ist das unwichtig.
void TDDProzesse::LoadAttributesList(int iTableID, TListData& data) {
AttributeIntMap attributes;
Reader()->Read(iTableID, attributes);
// Lesen der Typen
DatabaseTypesMap theTypes;
Reader()->Read(theTypes);
// Aufbau der Headers
data.ClearRows();
data.ClearHeader();
data.ListType(TListData::report);
data << THeaderField("Number", TListData::Right, 50)
<< THeaderField("Database", TListData::Left, 120)
<< THeaderField("Source", TListData::Left, 120)
<< THeaderField("IsKey", TListData::Left, 50)
<< THeaderField("Type", TListData::Left, 70)
<< THeaderField("Len", TListData::Right, 50)
<< THeaderField("Scale", TListData::Right, 50)
<< THeaderField("Nullable", TListData::Right, 50);
AttributeIntMapIterator iter = attributes.begin();
while(iter != attributes.end()) {
TAttribute& theAttribute = ((*iter).second);
TDatabaseTypes const& theType =
TCommonTools::FindKey<TDatabaseTypes, DatabaseTypesMap, int>
(theTypes, theAttribute.DbTypeID(true));
data.Image(-1);
data << theAttribute.AttributeNumber(true)
<< theAttribute.DbName(true)
<< theAttribute.ProgName(true)
<< (theAttribute.IsKey(true) ? "yes" : "no")
<< theType.TypeName(true)
<< theAttribute.Len(false)
<< theAttribute.Scale(false)
<< (theAttribute.IsNullable(true) ? "yes" : "no");
data.AddRow();
iter++;
}
return;
}
Und einen C++- Programmierer zu finden, der damit Listen füllt, dürfte einfach sein, er benötigt keine Kenntnisse der VCL mehr. Und ich kann die Stream- Operatoren für alle notwendigen Datentypen definieren. Und die Implementierung gegen die VCL kann ich dann schließlich einem VCL- Freak überlassen, wenn sich etwas ändert, dann profitieren alle Programmbereiche davon. Und wenn ein Kunde jetzt sagt, er möchte das ganze für XWindows und das GTK, dann hole ich mir einen entsprechenden Experten, der mir die Ankopplung implementiert, der Aufwand ist wie bereits gesagt, gering.
Und wenn jetzt jemand kommt, und sagt, mit der VCL geht das aber einfacher, dann frage ich mich, wie das gehen soll. Und wenn jetzt der CBX zum Einsatz kommen soll, wird nur eine einzige Klasse umgeschrieben ;).
Und das ist doch das Entscheidene, man nutzt die Möglichkeiten von C++ aus, macht sich nicht abhängig und kann sich doch der Magie des Borland Builders bedienen. Und auch da gibt es nichts gegen zu sagen, die RAD- Fähigkeiten des C++ Builders sind ausgezeichnet, also warum sollte ich mich dieser nicht bedienen. Also ist es auch nicht schlimm, mit dem BCB6 zu starten, vorausgesetzt, man programmiert mit diesem auch C++ und nicht VCL.
Schöne Grüße aus Berlin
Volker