- What's Covered in This Chapter
- Design Approach and Artifact Choices
- Free-Form Architecture Diagram
- From User Stories to Design
- Exploring Classes Using CRC Cards
- Application Flow Map (Homegrown Artifact)
- UML Class Diagram
- UML Package Diagram
- Directory Structure
- Sample File Names
- End-to-End Development Steps
- Acceptance Tests
- Other Considerations
- Summary
- Recommended Resources
Application Flow Map (Homegrown Artifact)
In past projects, I have used a table similar to Table 3.5. This format is homegrown, in that it is something I came up with. I call it an application flow map because it shows me how a user interface will function (or flow) end to end. This technique also nicely maps the user stories to the view (the "V" in MVC), which maps to the controller and, finally, to the model objects.
Table 3.5. Sample Application Flow Map
Story Tag |
View |
Controller Class |
Collaborators |
Tables Impacted |
Timesheet List |
timesheetlist |
TimeSheetListController |
TimesheetManager |
Timesheet |
Enter Hours |
enterhours |
EnterHoursController |
TimesheetManager |
Timesheet Department |
A Complementary Technique
In comparing this application flow map to techniques such as class diagrams or CRC cards, you will find that this map complements CRC cards and class diagrams. CRC cards list, among other things, responsibilities of each class, which is lacking in the application flow map. Class diagrams on the other hand, show relationships, cardinality, behavior (methods), attributes, and possibly more, which are more details than I like to have in this map.
By putting together classes in a textual and table format, we could also search for class names (in a large system, for example) and also sort these easily using a spreadsheet program or command-line utilities.
Extending the Application Flow Map with CRUD Columns
This table can also be altered for use with non-UI stories such as the Reminder Email: Employee user story. For example, the view and controller class columns can be replaced with a single column named Job, for instance.
Furthermore, you can extend this table by splitting the Tables Impacted column into four separate CRUD (create, read, update, delete) columns. This not only shows which tables are impacted, but how they are impacted, by the various collaborator classes. By adding CRUD columns, you essentially provide end-to-end flow of a user story (from the view to the database and back) in one row of our table.