The software industry has been searching for its own interchangeable parts and assembly line the way the automobile industry had reinvented the manufacturing process in the 1800s. Currently, there are no technologies that would allow software components to be assembled together without writing error-prone and tedious integration code. Interchangeability should not involve writing custom "glue" code, just as the automobile assembly line workers do not need to fabricate custom parts to fit the wheels into the rest of the car.
Interchangeability, as defined above, is the key to making software building process assembly driven. Independently developed, well-tested parts can be put together into a sophisticated application without exhaustive integration testing. All that's left to do is to write the application specific logics. This is exactly what Cosmo was designed to do.
Every software application needs an interface with its users. The user interface displays relevant data to the users and lets the users input data into the system.
Data Storage See A List of Data StoragesAn application usually retrieves data from a separate data source such as a database or an email server. It also saves data into the data source.
Action See A List of ActionsAn application often performs some actions based on the user input. For instance, when a user enters the logon ID and password, an action is performed to authenticate the user with the information entered. Another example is after a user composes an email message and click the send button, an action is needed to send the message to the destination address typed in by the user.
Input ValidationWhen a user enters some data, validation must be performed to make sure that the data is valid and non-malicious.
Parser/FormatterThe user's input may not be in the format that the application needs to manipulate or save to the data storage. Conversely, what comes out of the data storage may not be in the format in which the application wants to present to the users. This requires parsing and formatting of data to and from the user interface. For example, when a user enters a date in such pattern as "01/02/1982", a parser can be used to convert it from the text string into a date object which the application can understand and manipulate.