Accessibility
 
Home / Developer Center / Blackboard Sample Application

Developer Center Article

Branden Hall
Senior Developer
Fig Leaf Software
 
Developing the Blackboard Group Management application was an interesting experience, one from which I and the other developers working on the project—John Bennett and Tim Chi—learned quite a bit. This article explains the process through which we created the application, from the definition of our goals all the way through the final development process.

The Goal
The goal of the Blackboard Group Management application was to provide a web-based GUI that would allow instructors to assign students in their courses to study groups as well as to manage certain aspects of those study groups (mailing lists, online file sharing, etc). There was already an HTML-based version of the application but it was extremely cumbersome, particular when classes numbered in the thousands of students. The Macromedia Flash MX version needed to provide all the functionality of the HTML version but be smaller, faster, easier to use, and provide a lot more functionality.

The Constraints
Along with the these goals, the Blackboard Group Management application also came with some very tight constraints. In particular, the application needed to be as small as possible and had to be developed extremely quickly. In fact, most of the development needed to happen within the span of a single week.

The Process
In order to make the development process fit within the time constraints, we immediately chose to base all back-end integration on Flash Remoting. With this in mind, John, Tim, and I locked ourselves in a room for the majority of a day and hammered out exactly what the API on the back end would be. This meant mapping out each method, what it was expecting, and what it would return. At the end of the day we had a full specification of each method that would exist on the server as well as how the application would integrate into the Blackboard system (passing user IDs, etc.).

During that time we also wireframed the application from start to finish. Our wireframes consisted of each screen of the application along with detailed information about what each interface element would do and how they would interact.

After this the members of the group went our separate ways to do the development. Once we were finished with our respective parts of the project, we reconvened (this time just online) and spent a few days working out a few minor bugs until the application was complete.

The Architecture
After the first day that we spent hammering out the API and wireframes, I sat down to teach myself Flash Remoting. I knew the basics of how it worked but had never actually used it to create an application before. Because I knew I would be changing my code around quite a bit, I wanted to make sure it was as insulated as possible from the "GUI part" of app. Consequently, I wrapped all the server-integration code into its own ActionScript class. This way, as long as I kept the interface to the class the same, I could shuffle its guts around to my heart's content.

The other advantage to placing the server connectivity code into its own class was that I could test that section totally independently of the rest of the application. This let me create a few FLAs that would automatically test all of my class's methods for me—which proved invaluable as I was debugging.

After getting that class out of the way, I had to start building the actual application.

First off, the application is based on using the frames of the main timeline as the states of the application. For example, frame 1 is the main screen and frame 10 handles the group editing screen.

From here I mocked up the interface for each state using components. Essentially, the app stayed in its "ugly" state until it was nearly complete; it was only then that I skinned the components and added the background artwork. Once each component was given an instance name and had the name of its callback defined, I looked at the customizations that were going to be needed for some of the components. In particular, there are a number of list boxes in the application that display multiple columns of data as well as provide certain functionality like sorting on columns and tooltips. All of this functionality was wrapped up in custom items for the list boxes (the listbox component supports this via its setItemSymbol method).

On the whole, the majority of my development time was spent creating these custom symbol items—primarily because there wasn't much documentation available at that time on creating custom symbol items. Now there are a number of articles on this topic, available both in the DevNet and on third-party sites as well.

The next stage of development consisted of creating the callback methods for all the components. Finally, each "state" of the application had an initialize method defined in it that did the majority of the work; this is where all the business logic was defined. Interestingly, this stage of development went along quickly. It consisted mostly of enforcing rules about double-checking the user's actions and keeping data in the application in sync with the server.

As you can see, the actual app is a bit of a hodgepodge of object-oriented and procedural code. In fact, it was the ability of Macromedia Flash MX to work well with either or both paradigms that allowed this application to be built as rapidly as it was. By creating particular parts of the application as classes, I was able to keep that code insulated from the rest of the application. Then by writing the majority of the business logic in a less structured, procedural manner, I was able to finish the application quickly.

Had the application allowed for a longer development cycle, I would have definitely made it more object-oriented and generally more organized. Even so, I feel that being able to modify my preferred programming style with Macromedia Flash MX in order to meet a tight deadline highlights its inherent flexibility and power for use in web application development.



About the Author

Branden Hall is a senior developer for Fig Leaf Software in Washington DC, where he spends most of his time developing high-end Macromedia Flash solutions, consulting, and moderating his very popular code-centric mailing list, Flashcoders (chattyfig.figleaf.com). He has also worked on a number of Macromedia Flash books and often speaks at industry conferences. You can reach him at bhall@figleaf.com.