I have created a test of my below Hypothesis @ www.arshu.com. Please note it is 0.1 version and
tested using Firefox only. Download if have .NET to run the whole site in your PC.
Hypothesis :
Complex software has to be done by assembling reusable components to have the following advantage. 1) High Productivity 2) High Flexibility/Changeability 3) Low Cost. This is how other Industries have managed complexity/productive and cost. Even Fast Food industries like KFC etc, assemble food instead of making food.
This is not my original thought, but I found this approach has been discussed even in mainframe era. I consider this as the Holy Grail of Software.
Loose Coupling/SOA/Struts/Spring/Dependency Injection are various approaches to acheive the above. I have seen Mashups/Popfly/SharePoint WebParts Framework implementing this type of approach even though it is not fully separating assembly and coding.
In connection with testing the above Hypothesis, I started working on a Framework where I can clearly separate Assembly and coding.
I have recently started work on mini ERP like workflow and document management product for Architecture Industry and going to use this Framework to really find the benefit.
In the mean time I would like to hear any comments from others. Do you think this Hypothesis is valid. Have you come across any other way to separate assembly and coding.
How are you distinguishing "coding" from "assembly"? What is code, if not a series of instructions assmbled together in a sequence? What is the assembly of components, if not writing code using designated primitives?
Turing showed that it's possible to write almost anything with a tiny number of primitives. If you have some kind of means of combination and means of abstraction built into your language, you can generate new objects from the primitives, which can then be combined and abstracted, ad infinitum.
In other words: you're doing nothing new.
The problem you are going to run into is that there is no magic set of components which will meet all needs for all purposes, at the appropriate level of abstraction.
If you want to build a Domain Specific Language for creating ERP systems, more power to you. That's a worthwhile project.
But don't go mistaking that for "the Holy Grail of Software".