Contact: Mohamed Koker
Products used: Data Abstract, Hydra, RemObjects SDK for .NET and Delphi
Project: Producing configuration tools that allow customers to modify the behavior of a number of hardware devices used to control and modify other equipment in electrical substations.
GE moved from their legacy non-managed system based on Delphi and C++ Builder with Paradox and custom data files to a managed system based on .NET and powered by RemObjects Data Abstract and RemObjects SDK for the data distribution and service layers. RemObjects Hydra is a key component for migrating from the legacy non-managed system and for maintaining a modular architecture.
Legacy System: Used a combination of Delphi and C++ Builder with Paradox and custom data files.
Our original strategy was to convert from Delphi to Delphi for .NET, and then gradually move to C#. This ended up not being a good strategy because Delphi for .NET lagged too far behind in .NET platform support. This resulted in all the component suites moving on without it.
Lesson learned: Only use technologies from vendors who are committed to staying up to date with the latest developments in the .NET Framework.
Our next strategy was to rewrite the legacy Delphi code in C#. This had the advantage of proving full access to the latest .NET platform features. Unfortunately this meant throwing out the existing functional legacy system while it was rewritten from scratch. Also, the process of rewriting introduces new defects which need to be discovered and fixed. The time and cost required to complete the rewrite and then correct bugs was found to be much more expensive than expected.
The decision was made to use RemObjects Software’s suite of frameworks. RemObjects Software provides powerful infrastructure frameworks that were key to the successful architecture of our project. The following is an overview of some of the ways these frameworks were used in our project.
RemObjects Hydra was chosen because it allows modular plugin architecture and the combining of legacy non-managed code with new managed .NET code. This allowed us to re-use existing functional C++/Delphi code as much as possible while adding new functionality in C#.
All tiers of our application are implemented as Hydra hosts and plugins. The plugin architecture allows different developers to develop different parts with different languages, without impacting each other. This means one developer can be working on a legacy module in Delphi or C++, while other developers add new systems in C#. All the plugins come together in the host and work seamlessly.
Hydra also allows accessing custom non-managed C++/Delphi code based binaries from C# in a type-safe manner, as opposed to just using p/invoke. This gives .NET applications access to custom C++ APIs, legacy C++ code, and specialized libraries. The type safety provided by Hydra means a more reliable system, and a quicker coding process. This also translates to more robust exception and error handling.
The visual plugin functionality of Hydra allowed the reuse of existing Delphi forms by embedding them in the new C# GUI in a seamless manner. This allowed our new C# system to leverage the working Delphi forms and be functional right away. Thanks to skinning technology from DevExpress and the seamless integration provided by Hydra, the user is presented with a clean user interface and remains unaware of the modular architecture or legacy user interface elements. Maintaining a strict separation of concerns is important for a system of this magnitude. This is enforced by only allowing the different plugins to communicate with the data tier through web services using the RemObjects SDK. The remoting features of RemObjects SDK make working with web services much simpler and more powerful. This includes traditional SOAP messages as well as more efficient communication via the RemObjects BinMessage format.
The RemObjects SDK Service Builder allowed the visual design of services used to communicate. Then the plugins and the data tier are built based on these designed services. This simplified the development process and streamlined the communication between the legacy and .NET components.
Data Abstract made the migration from the legacy Paradox data files to Microsoft SQL Server painless. RemObjects added support to Data Abstract to build Schemas supporting Paradox and the Borland Database Engine (BDE). Once the Paradox data files were abstracted into the Data Abstract Schema, the database could easily be replaced with Microsoft SQL Server. Since the Schema was abstracting the database backend, the change of database did not require downtime or changes to the client. This translated into more productive uptime for our project and users.
Data Abstract’s flexibility in working with and abstracting both legacy data sources and modern data sources makes it the ideal choice when moving from a legacy system. The abstraction provided by the schemas keeps the clients decoupled from the database. All the business logic is isolated into the middle-tier where it belongs. Once the migration is complete, the system provides maximum flexibility for ongoing maintenance and future expansion.
“The choice to go with RemObjects Software’s infrastructure frameworks is key to the success of our project. It enabled us to complete our project quicker, and build a more robust system that will continue to meet our client’s needs for years to come. RemObjects Software’s commitment to remaining current with technology means we will always have access to the platforms and tools we need. Their support and ability to add features and fix bugs in a timely manner is critical to our project and makes them a great partner to work with."