OpenSER Web Interface will be developed in true OOP fashion, meaning compatability will only be with PHP 5.0+. The program will be composed of the traditional three layers: View, Logic, and Data.
Common OOP patters will be employed to solve many of the problems involved with this project. The next three sections will describe the three layers from top-to-bottom, or view-to-data.
View Layer
Front Controller
Single point of entry, everything goes through index.php
Easy authentication control and program setup
Minimize duplication of setup in various pages
Application Controller
Loads configurations from file or database, holds for program use
Caches expensive data loads, such as parsing an XML configuration file
Acts as DB Singleton and holds DB settings
Command Resolver
Modularizes resolution of commands
Allows for easier refactoring to support other input methods (HTTP, XML RPC, SOAP, etc.)
Context
Primary responsible is to pass data to and from commands
Holds all incoming request data
Passes return results from commands
Passes DB handle to commands
Context Interpretor
Allows multiple sources of input, compare to command resolver (HTTP, XML RPC, SOAP, etc.)
Builds context for commands to use
Responsible for filtering dangerous data, but not for validating data
View/Logic
Command
Creates “real” objects, executes methods, does something
Acts on contexts
Responsible for validating form data
Will return simple status codes, passes returned data back into the context
Logic
Domain Objects
Are the real objects in the system, i.e. User, VoicemailBox, SipProxy, etc.
Primary responsiblity is to DO something
Logic/Data
Mappers
Map Domain Objects to the database or other storage layer
Domain Objects will be unaware of mappers
Will support four standard operations: Save, Delete, Load, and Update
Can load collections of objects from arrays of raw data
Allow for finding/searching for object, returning a collection of possibilities
Data
Collections with Lazy Load
* Implements PHP Iterator interface
* Type specific collection
* Given DB result and a Mapper to build collection of objects with
Identity Mapper and Unit of Work
All Domain Objects are added to this, preventing duplicate objects
Simplifies database saving, all objects are marked for necessary database operations that are done when the destructor of the mapper is called