Cognifty is segmented into a 3-tier system of code. The current style-du-jour of MVC is a bit overused in the Web world. MVC is a pattern for graphical user interfaces, not for application architecture.
MSE is a structured layout of business logic so that any portion of code is easily found by any member of a development team. By assigning specialized diretory, file, and class layout, much work can be eliminated because the framework follows standard naming conventions.
A Module is, literally, a directory. It can be an entire Web application or a well defined portion of an entire Web application.
A Service is a special class inside a module. Services provide all the business logic of your application. A service can have special templating and authorization hooks, different from other parts of your Web application.
An Event is a single instance of a client request. Events are methods of your service class. Events take SystemRequest objects as input and template arrays for output.
Templating can be thought of as the output phase of your application. All output from a service is named in an output array. This array is then passed to the templating system, which can be configured to suit your needs.
The default templating system is designed to pull in one single template file and put the current MSE's output into the main content area. Other content areas use the Layout system to gather their needed output.
The layout system is built around named areas of your template. Each area is defined in the layout.ini file and is given a specific path, file, class name, object name, and method call. The template designer then simply places a call to the layout engine and passes in the named area, example: box.side1. The layout system then finds the configured object method call for box.side1, calls the method, and passes back the complete output.
The entire system configuration is held in the Object store. The object store eliminates the need for globals.
The object store is essential to customizing a developed Web application. With it, you can insert your own sub-classes throught the system without changing any code! You simply need to reconfigure core components in the supplied ini files, giving your new sub-classes and the system will automatically use them system-wide.