Architecture Milestone¶
Due Date¶
Due Date: October 20
Grading: Team
Lectures¶
You must watch the Architecture lecture before working on this milestone.
Description¶
Now that you are comfortable working with your chosen framework, you will write a document that roughly describes the big parts of your code. The structure will depend a lot on your chosen framework.
If you are building a webapp then you will probably list the set of database tables (models, for example: django:Model, rails:ActiveRecords, etc), the set Views (aka: react:components, flutter:widgets, django:blocks, etc), and the set of Controllers. For webapps you should also list the of your URLs app, and what lives at each one.
If you are building an Android app then you will list your Activities or Fragments, along with their corresponding Views, as well as your model Java classes. You will also list your database tables (firebase, sqlite, localStorage, etc) if you need persistence, which almost everyone does.
Think deeply about your design. Go over the most common use-cases and check how those will be accomplished in code: which methods will be invoked? do the methods have references to all the objects they need in order to perform their job? Remember that your main goal is *de-coupling** the various classes: the fewer references (method arguments, global variables) they need, the easier your life will be.
Deliverables¶
Add an Architecture document to the wiki. It should contain:
- List all the languages/frameworks/libraries/services/APIs you plan to use.
Explain how they will tie together. For example: This will be a native
Android app written in Kotlin, using the
android.graphics
library, using firebase real-time database for cloud data, and firebase authentication for user accounts. - What package/build manager will you use? npm, gradle, yarn, flutter, pipenv, etc.
- List what each person will work on. Everyone must make significant code contributions, or they will fail the class, see Syllabus.
- Make sure all the images (if any) are embedded in the wiki page and hosted at GitHub.
- Make sure the wiki page is easy to read.
If you are building a webapp:¶
- Deployment: How will you deploy? Which hosting provider(s)? Automation? Scripts? Explain.
- Are you using Virtual Machines (vmware, vbox, etc) or Containers (docker) for development or deployment? Explain.
- Is it a SPA or traditional? or mix? Explain. (My web application development lectures explain the difference.)
- List of URLs you will implement. Explain any search arguments in English. Link (actual hyperlink) each URL to the page it shows in your Detailed Design milestone.
- If implementing a REST API, document it. List all methods, parameters, and give English description of what they do.
- The Views of your app. Embed the images from your Design Milestone. Typically, a webpage includes multiple views. For example, this webpage has a Header, Menu, and Content views (at least). Frameworks have different names for these Views/reusable components: react:components, django:blocks, vue:components, etc.
- The Database schema: set of tables/documents with list of attributes and their types. Describe each table and attribute in English.
- List of common queries you expect will be needed. Do any of then need to join tables?
If you are building a mobile or desktop app:¶
- Release: How will you create and deliver a binary to testers? Explain. Note that the testers include us (the teachers of this class, when we grade your app). You must deliver a simple to install app: double-click to install.
- Are you using Virtual Machines (vmware, vbox, etc) or Containers (docker) for development? If so, explain.
- The Models for your app. These could be UML class diagrams, or just models with attributes (with type) and descriptions (in English).
- How will your app maintain state? in memory? or database? or both? Note this in your Model Classes.
- If you are using a db-backend (say firebase) then include the Database schema: set of tables/documents with list of attributes and their types.
- List of common queries you expect will be needed. Do any of then need to join tables?
- The Views of your app: name, describe. Embed the images from your Design Milestone. Typically, one page in the app is composed of multiple View elements. Frameworks have different names for these Views/reusable components: ios:View, flutter:widget, android:View, android-jetback-compose:Composable-function, etc.
If you are building a mobile or desktop game app:¶
- Just like above if applicable. Most games won't have database, single-player
tend not to have backends. You will also need to list and describe your main
interaction functions (methods) and how they will be called. For example:
onTouch
,onButtonA
,onCollision
, etc. These are typically methods of the Models you did above. Your description should tell us which other things in the world it modifies and how, just English description.
Do not make any changes to the wiki pages used for this milestone after the deadline. Wait until after you receive the grade for the milestone to make any further changes to these pages.
Grading Rubric¶
Grade is 100 minus the total points lost, with minimum of 0. See grading scale in Syllabus. Points lost for each area are:
Frameworks, Libraries, APIs, etc.¶
Excellent (0-10 points lost): Lists all software used. Explains how each one is used.
Good (11-20 points): Lists all software used.
Bad (21-35 points): Is missing some software that will be required.
Failed (> 35 points): Nothing shown.
URL space (if applicable)¶
Excellent (0-10 points lost): Most URLs shown. Parameters shown.
Good (11-20 points): Some URLS shown
Some or no parameters show.
Bad (21-35 points): Few URLs shown. Few or no parameters
Failed (> 35 points): Nothing shown.
Model/Schema¶
Excellent (0-10 points lost): Most Entities named and described. Most attributes named, typed, described.
Good (11-20 points): Some Entities named and described. Some attributes named, typed, described.
Bad (21-35 points): Few Entities named and described. Few or no attributes *named, typed, described.
Failed (> 35 points): Nothing shown.
Views¶
Excellent (0-10 points lost): Most views named.
Good (11-20 points): Some views named.
Bad (21-35 points): Few views named.
Failed (> 35 points): Nothing.
Quality of Document¶
Excellent (0-10 points lost): Everything explained well. Easy to understand.
Good (11-20 points): Some explanations.
Bad (21-35 points): Minimal explanations.
Failed (> 35 points): No explanations.