Hi Doug, ".......................This is very much along the lines of the approach I use combined with a client-server data base back end I wrote for my own use. A record is returned as a two-dimensional array thatcan be used to directly update the front end object. The array is serialsed and transmitted using IP sockets.................... "
I find this very interesting. Any pointers as to how you've actualised a client/server implementation? Regards, Gilbert. ________________________________ From: "[email protected]" <[email protected]> To: [email protected] Sent: Wed, March 17, 2010 1:56:58 AM Subject: [Harbour-users] ORMs (from "thread" GUI programming) Hi all Its nice to see that a discussion that started out with some highly questionable assertions about OOP has turned right around to a discussion of ORMs which essentially extend the OOP concept. Harbour doesn't force OOP on anyone, but I suspect most savvy xBase coders head that way. Even those that write procedural code are using some objects, hidden from them by the preprocessor. Beginners soon realise that they are writing code that pretty much does something similar to what they have done before. At first they may use the "cut and paste" approach. Most then come to realise that this approach is not ideal because 1. Its easy to miss bits of code that need to be altered 2. To change "standard behaviour" you have to change code in many places So most of us ended up with a whole series of "utility functions" which identified (as parameters) those things that changed from invocation to invocation and meant that standard behaviour could be changed by altering a single piece of code. OOP basically extends this in a more powerful and consistent way. But if you don't like writing "standard" Harbour OOP code that might look like obj_MyWindow := TWindow():New( 500, 300, "Sample Window" ) you can use the preprocessor and write something like CREATE WINDOW myWindow TITLE "Sample Window" SIZE 500, 300 all it takes is a preprocessor directive like #xcommand CREATE WINDOW TITLE SIZE , => ; := TWindow():New( , , ) That is one of the fundamental beauties of xBase. I would also note that the popularity of VB is due to Microsoft's marketing power and the fact that many of us are effectively forced to use it (or its sibling VBA) to automate office type tasks. If you judged languages by their popularity you wouldn't be using Harbour despite the fact that its so wonderful a language. Now onto the interesting part - ORMs. These should fit very neatly into Harbour. Take an "example" from a previous post: emp=Employee.new emp.name = "Emp1" emp.basic = 4500 emp.designation = "Programmer" emp.save Harbour equivalents are easy: obj_Employee := TEmployee():New() WITH OBJECT obj_Employee :Name := "Emp1" :Basic := 4500 :Designation := "Programmer" :Save() END Of course there are many alternatives (depending in part on the TEmployee class) such as obj_Employee := TEmployeeNew( "Emp1", 4500, "Programmer" ) obj_Employee:Save() Or with suitable preprocessor directive for those that like the object orientation hidden CREATE EMPLOYEE ThisEmployee ThisEmployee:Name := "Emp1" ThisEmployee:Basic := 4500 ThisEmployee:Designation := Programmer SAVE EMPLOYEE ThisEmployee Obviously we have to define the TEmployee Class which would inherit from a class that "understands" how to read / write etc but not the particular details of an employee record, something like: CLASS TEmployee FROM TSingleRecord DATA Name DATA Basic DATA Designation // etc ENDCLASS Methods like Save() would be inherited from TSingleRecord as might its oid (object identifier / primary key ) CLASS TSingleRecord DATA oid // etc METHOD Save() // etc ENDCLASS This is very much along the lines of the approach I use combined with a client-server data base back end I wrote for my own use. A record is returned as a two-dimensional array that can be used to directly update the front end object. The array is serialsed and transmitted using IP sockets. Properties are directly updated using __ObjSetValueList(). This type of approach would seem ideal for an ORM in my opinion. Regards xProgrammer _______________________________________________ Harbour-users mailing list (attachment size limit: 40KB) [email protected] http://lists.harbour-project.org/mailman/listinfo/harbour-users _______________________________________________ Harbour-users mailing list (attachment size limit: 40KB) [email protected] http://lists.harbour-project.org/mailman/listinfo/harbour-users
