Raise your level of abstraction
just joined MDSN, looks like a lot of useful reading available.
Computer science major, 20 years ago got into developing quite a few data-driven Applications with similar scenario, like:
one or more Enterprise data structures defined (branch, department,..., employee) and/or (warehouse, block,..., part) and/or (lists of processes, remunerations, customers, etc) which are were kept in the Database tables. There are CRUD operations defined on those related tables and there were some domain-specific operations too. Plus various reports. Pretty common and usual stuff.
I started with some generalization attempts: a business object consists of data container(a DB table), view(s) and form(s) and relations to other objects. It all could be expressed in plain text. CRUD operations could be executed in precompiled code - no actual generation here. UI of an object was interpreted by pre-written code again - no code generation here either. Relations one-to-many and many-to-many were again interpreted by run-time. Only custom logic has to be manually coded. So that how it started. I could elaborate if needed.
That approach evolved into something I cannot categorize and I'm looking for help and opinions here.
Today the highest level of abstraction is the same: a business object is a table, plus UI(s), plus CRUD operations, plus objects relations, plus API to implement custom Data processing. An application is a set of such objects and it is most likely might be expressed in UML or such. Although it is not.
There was some custom language before, today an App definition is hidden behind objects' Visual Properties Manager(s). An App definition contained in the Relational DB as set of text-based objects' definitions. There is a server side code waiting for client code to connect. That is how it works.
The client supplies credentials and if valid, receives back from the server an "entry" object's definition from the Database - usually the Main Menu (a table). The client interprets that definition and creates UI. Human user make a gesture (keyboard or mouse, touch interface is not supported yet) and activates one of that Menu's links. Another object loaded from the server and so on. Menus are immutable objects - they are easy. When mutable table loaded from the server, both a client(grids, views, forms) and a server(sessions, locks) support CRUD and custom operations (e.g. delete every odd record in the table) in ACID fashion. All clients are synchronized real-time - means all the content changes instantly propagated to all relevant sessions. There is a gesture language to visually define parameters of complex requests. SQL gets generated and executed by the server part and results passed to relevant client/sessions. There is Java API (architecture is language agnostic) which used on loaded objects on the client side only (!) by mimicking human gestures: "load object"/"edit object" and so on. The server is never restarted.
The client part contains Properties Manager code, which allows to define new objects and redefine new ones without leaving a live Application. Team development welcome.
There are client side processors which allows to link a table cell to Images, PDFs, some HTML. More processors - more data types could be supported. At last there are pure UI objects - with no data containers defined. They work pretty much like Java Canvas. After being loaded they call user code, which has access to other objects in the Database. That allows to create UIs beyond grids and forms - up to multiplayer games - with custom programming sure.
That thingy works in production environment for 3 years now. It is extremely productive and helpful. But I'm struggling to classify it. What is it? RAD RIA tool? It does generates some SQL, it allows live Apps design like Web CMSs, it is based on generalization of an SQL table... I'm more experimenting practitioner then academician.
Please help me define what that Datalator thing is. And what place could it hope to find in the computing world. Would be much obliged for reviews and opinions. Sorry for hasty prepared story.
I'm no good with web sites, forgive me. Please comment.
Alex, that looks a lot like CodeCity.
Thanks Rafael, very interesting.
I guess I like "EvoSpaces" even better http://www.inf.usi.ch/projects/evospaces/tool/evospaces_demo.avi
That is one nice visialization tool. The approach of my experiment were different though:
CodeCity/EvoSpaces more aimed on analysis of already created source, I'd use such an
environment to actually do coding... source to 3D conversion(or 3D to source) must be just a click away. The biggest problem I've got into when trying to implement such an environment is the visual methaphor for representing both algorithms and data structures conviniently. I think I found one nice approximation, but... have no implementation so far... was not lucky to be discovered by Hasler Foundation (www.haslerstiftung.ch) which supported CodeCity and EvoSpaces :-(
When I have something to show - I will report here :-) Thank you for the link, nice to know somebody else researching the possible paradigm shift in software making.