Case Study 3 - Dynamic Application Development

This small business had won a contract to help a federal agency reorganize how its data was presented to its intended audience, with particular interest paid to delivering content that was easily indexed by Google's search engine crawlers.  With a client that wasn't fully aware of the potential benefits of greater search engine accessibility, this firm had to quickly build a prototype to demonstrate the ease by which this could be accomplished.

Of course, nothing in enterprise-level software development is "easy" except in hindsight.  With only one full time developer and the potential use by non-programmers, everything needed full documentation to be easily transferred and quickly understood.  WorkSpaces provided the perfect means of centralizing and connecting the various subject areas involved in the project.

The following provides a brief narrative of the project process and how WorkSpaces was used to support development.

 

Project Scope

The scope of this project was to develop a web-based application that generates static .html pages with summaries, graphs, and relevant links from a database full of survey data


Technology Requirements and Project Resources

PHP – programming language

MySQL – database server

CakePHP – php-development framework

The Cookbook – CakePHP documentation (http://book.cakephp.org/toc/3/The-Manual)

Putty, Telnet (Windows) Terminal (Mac/Linux) – command line applications

TextEdit, TextWrangler – text editors

Microsoft Excel – for creating graphs

Adobe Fireworks – for image manipulation

Test server – with PHP5 installed and mod_rewrite enabled

phpMyAdmin – MySQL server GUI

 

Delivery Timeline

6-8 weeks

 

Project Design

My plan for development is to specify lowest-level detail requirements, design the project from front-end to back-end, then execute from back-end to front-end. The following schematic will reflect my Project Design approach:

Step 1. Creating the Data models

→Reading and analysis of data and codebook to understand context of datapoints, conducting relevant industry research, interviews with client
→Entity Relationship Diagramming to visually map out how the databases interact – defining foreign and primary keys for each database table as well as a Data Dictionary that will document/summarize the contents of each database table. The ER Diagram will also map the categorical relationships between tables – these categorical relationships are mapped in terms of belongsTo, hasMany, and hasOne relationships

→Create UML diagrams to map User Activity as well as Class relationships to guide Object-Oriented Programming

 

Step 2. Designing the HTML page layout

→Create user stories to be utilized during the debugging mode (step by step of each way a user might use the application), this will be the basis of page design mockups - here I include desired interactivity and interface effects
→Generate the CSS

→Generate the CakePHP view (.ctp files) – the views are the pages that will be dynamically generated by the CakePHP engine, and the output printed on them will be ported onto the static HTML pages

 

Step 3. Designing the PHP functions that will operate within CakePHP

→Map CakePHP classes, objects, and controller actions, determining the dynamic pages onto which the layouts will be applied

→Utilize CakePHP's scaffolding feature that can greatly speed up the development of core "standard" functions on your controllers and intuitive database table relationships (belongsTo, hasMany, hasOne) on your models.

 

Project Execution

The process of building the application and of generating static pages

Step 1. Create content to be placed in the divs defined in the HTML layout and CakePHP view

→ Data summaries for datapoints
→ Data tables

Step 2. Build the Database and CakePHP models (use ER Diagram as guidance)

→ Create and populate database, build CakePHP models that link classes to data sets


Step 3. Build CakePHP controllers linking classes to script actions

Step 4. Build the scripts that will generate the static pages

→Hint...think PHP iterator and foreach(), yes it can be done all in PHP!