Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# compiled output
/dist
/node_modules

# Monitoring and Logs
logs
newrelic.js
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
78 changes: 78 additions & 0 deletions LAB_INSTRUCTIONS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Lab Instructions

# Step 0: Create a GitHub account
1. If you don't have a GitHub account already, [create one](https://github.com/join). If you do, **record the name of your handle in your lab report** and **record a link to one repository you either follow or star**.
2. If you don't already have _git_ installed on your development machine, [do so](https://git-scm.com/downloads).
3. Install a text editor or some sort of application for local development. Lately, I'm partial to [Visual Studio Code](https://code.visualstudio.com/) and my instructions assume it's use, but you're welcome to diviate. _Each one should choose their own sword, etc. etc._

# Step 1: Fork this repository and create your lab report file
1. After logging in, navigate to the [root](https://github.com/trevordbunch/cis411_lab2_arch) of this repository.
2. Fork this repository to your personal GitHub account (hint: read the page).
3. Navigate to your forked repository in your GitHub account and copy the reference to your repository in from the <button class="btn btn-sm btn-primary">Clone or Download</button> button.
4. Open the terminal or command line interface on your development machine, navigate to your chosen working directory, and execute the following command: ```git clone [YOUR COPIED GITHUB CLONE REFERENCE]```.
5. Navigate to that directory ```cd cis411_lab2_arch```.
6. Create a lab report mardown file (ex. ```cp labreports/LAB_Template.md labreports/LAB_[GITHUB USERNAME].md``` ).
7. Add your lab report ```git add *```
8. Add the file to your branch ```git commit -a -m "your commit message"```.
9. Push the change to GitHub ```git push -u origin main```.
10. As you make additional changes to the lab report, commit and push your changes.

**Note:** you are free to work with classmates on this assignment. _Good architecture is born out of collaboration - not reclusive mad-scientist behavior._ However, if you work with colleagues:

1. You must specifically note your collaborators by name at the top of your report.
2. You may not completely copy each others work (diagrams and descriptions, even if your solutions are identical).

# Step 2: Analyze the Proposal
Review the proposal for the [Serve Central](assets/ServeCentral.pdf) project. Let's imagine that the project has been granted (relatively) unlimited resources if they can deliver a version 1 release in 120 days. As a result, the team decides to implement an MVC architecture for its version 1 release, delivering functionality through a [responsive web application](https://en.wikipedia.org/wiki/Responsive_web_design).

Summarize Serve Central in 1-2 sentences for those who have not been able to review the slide deck.

## Step 2.1 Document Use Cases
Consider the target audiences for Serve Central (volunteers and service agencies), define one use case for each of those audiences.

Dennis, Wixom and Roth (2014) have a full chapter (4) on writing use cases. You are welcome to use an alternative format (there are plenty of alternative templates out there), but please ensure that you include the following elements: Title, Description / Steps, Primary Actor, Preconditions, & Postconditions. A sample is included in the [assets folder](assets/UseCase_Sample.md).

## Step 2.2 Define the MVC Components
Build a [table](https://www.tablesgenerator.com/markdown_tables) of at least **four models, views, and controllers** needed to produce this project based on the business requirements you do not need to research any technology solutions for this steps. Here's a hint:
- Models typically reflect your data entities
- Views typically mirror your pages or screens
- Controllers govern system performed actions

## Step 2.3 Diagram a Use Case in Architectural Terms
Generate and [embed](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#images) at least one diagram of the interaction between an Actor from the Use Cases, and one set of Model(s), View(s), and Controller(s) from the proposed architecture, including all the related / necessary services (ex: data storage and retrieval, web servers, container tech, etc.)

_Note: You are free to use any diagraming tool and framework that you want as long as it clearly communicates the concept. I typically use a UML System Use Case or [UML Sequence Diagram](https://www.uml-diagrams.org/index-examples.html). If you do not have a preferred diagramming tool: [draw.io](http://draw.io) or [lucidchart](http://lucidchart.com) are good cloud-based options._

# Step 3: Architecture Enhancement
After an initial release and a few months of operation, Serve Central encounters a tremendous growth opportunity to extend their service and provide a volunteer recruitment and management interface to __four__ of the primary volunteer entities in the United States. As such, a reevaluation of the architecture is required, one that allows:

1. Thirdparty services to both input and retrieve data from the Serve Central model/datastore. (For instance, receiving volunteer opportunities from United Way chapters across the country.)
2. Building organization-specific interfaces on top of the Serve Central business and data logic. (For instance, allowing the registration services of Serve Central to be embedded in the website of local churches, [ah-la Stripe embedding](https://stripe.com/payments/elements).)

To support these objectives:
1. What architectural patterns (either of those presented in class on based on your own research) are appropriate? Justify your response, highlighting your presumed benefits / capabilties of your chosen architecture(s) **as well as as least one potential issue / adverse consequence** of your choice.
2. Using your preferred diagramming tool, generate a diagram of the new Serve Central architecture that supports these two new requirements.

# Step 4: Scaling an Architecture
18 months into the future, Serve Central is experiencing profound growth in the use of the service with more than 100k daily, active users and nearly 1M event registrations per month. As a result, the [Gates Foundation](https://www.gatesfoundation.org/) has funded a project to build and launch a mobile application aimed at encouraging peer-to-peer volunteer opportunity promotion and organization.

In addition to building a new mobile application interface, the grant requires that the project prepare for the following future needs:

1. Consuming bursts of 10k+ new volunteer opportunities per hour with a latency of less than 15 seconds between submitting an opportunity and it's availability in the registration service.
2. Supporting a volunteer and event data store that will quickly exceed 50TB of data
3. Allowing authorized parties to issue queries that traverse the TB's of data stored in your datastore(s).
4. Enabling researchers to examine patterns of volunteer opportunities as a way of determining future grant investments.

What archictural pattern(s) will you employ to support each of these needs? What will the benefits and consequences be? Why are changes needed at all? Justify your answers.

# Step 5: Submitting a Pull Request
Once you've completed your report markdown, reviewed your markdown formatting, and have committed all your changes to your (primary) main branch, initiate a Pull Request in GitHub to submit your Lab Report.
1. Navigate to the root of your forked repository (ex. https://github.com/YOURHANDLE/cis411_lab2_arch).
2. Click the _New pull request_ button.
3. Choose the base fork _tangollama/cis411_lab0_ is the target and that your fully updated _main_ branch is the source.
4. Enter a title and description for the Pull Request (PR), **referencing at least one other student in the content via their GitHub handle**, and submit the PR.
5. Submit that URL to canvas as your lab report work.

# Extra Credit
1. Create and embed a comprehensive diagram of your final architecture (i.e. one that meets all the requirements of this lab, including Step 4).
2. Augment/improve the assignment. Suggest meaningful changes in the assignment and highlight those changes in the extra credit portion of your lab report.
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2021 Trevor Bunch and Joel Worrall

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
47 changes: 42 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,45 @@
# cis411_lab1
Review a handful of architectural scenarios and provide a justified, convincing report of solutions.
# CIS 411 Lab 2: Architecture Selection
This is the Requirements Lab for CIS 411: Systems Analysis and Design for [Messiah University](http://messiah.edu)

The purpose of this lab is to engage students in the considering the purpose, value, and unique differentiation of system architectural patterns.

# Doing the Lab
- Here's the [link to the lab instructions](labreports/LAB_INSTRUCTIONS.md).
- Here's the [link to the lab template](labreports/LAB.md).

Go forth and follow the instructions!
## 1. Pre-Requisites
1. GitHub account
2. Git is installed on your development machine.
3. Text editor or other integrated development environment (IDE) for modifying code.

## 2. Lab Description
> Software Architecture: A sufficiently detailed design plan / blueprint (often expressed in working code / prototype / demo) for an end-to-end software / technology solution to a business problem that contains some ultimate human benefit/impact.
Software Architects have to where a number of different hats. They must have
1. a command of the business domain,
2. a design-sense for solutions that humans can use,
3. the technical chops to understand what platforms and products to use, and
4. practical knowledge on how to deliver software.

In this lab, you are going to review a proposed architecture for an application called **Serve Central**. They have proposed a Model-View-Controller (MVC) architecture, and you are going to do the first round of analysis on their proposal by documenting use cases and identifying the architectural components.

Fortunately, the team has done a fantastic job, so you will be asked to reassess your designs for two different business opportunities.

Detailed instructions are [here](LAB_INSTRUCTIONS.md), and you are expected to compile your findings into a labreport following this [template](labreports/LAB_TEMPLATE.md).

## 3. Submissions
You are expected to create a lab report as a markdown file under the labreports directory using the **LAB_[GITHUB Handle].md** naming convention in your forked repository. After you have reviewed your work, then you should submit a `Pull Request` to this repository with your lab report and any accompanying images/files (e.g., required diagrams). Add the `Pull Request` URL into the courseroom LMS (Canvas) for grading.

# Resources
Lab Specific Help (since this may be your first GitHub experience or writing requirements, we have some additional resources for you :) ).
- [Detailed instructions](LAB_INSTRUCTIONS.md).
- [Lab template](labreports/LAB_Template.md)
- [Serve Central Proposal](assets/ServeCentral.pdf)
- [Architecture Lecture Slides](assets/04p1_SolutionArchitectures.pdf)
- [Sample Use Case](assets/UseCase_Sample.md)

Understanding Markdown Syntax
- [Markdown Guide](https://www.markdownguide.org/)
- [Github Flavored Markdown](https://github.github.com/gfm/)
- [Table to Markdown tool](https://tabletomarkdown.com/convert-spreadsheet-to-markdown/)
# License
This content is provided under the `MIT` [license](LICENSE).
# Credits
Special thanks to Joel Worrall, aka [tangollama](https://github.com/tangollama), for co-developing this course and writing the original version of this lab [https://github.com/tangollama/cis411_lab1](https://github.com/tangollama/cis411_lab1).
Binary file added assets/04p1_SolutionArchitectures.pdf
Binary file not shown.
Binary file added assets/ServeCentral.pdf
Binary file not shown.
8 changes: 8 additions & 0 deletions assets/UseCase_Sample.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
| Use Case #1 | |
|---|---|
| Title | User Registration - Volunteer |
| Description | **As a potential ServeCentral user, I want to register for an account, so that I can find volunteer opportunities in my area.** |
| Steps | 1. An individual navigates to the ServeCentral webpage, and clicks `Register as Volunteer`. <br> 2. The individual completes an initial registration form (Full Name, email address, password, password confirmation, acknowledgement of terms of service). <br> 3. The registration form will validate the following conditions: valid email address, password matches password confirmation, and terms of service is checked. <br> 4. After confirmation that the account is created, the user is redirected to the home page in a logged in state and a banner reminder that they need to activate their account. |
| Primary Actor | Volunteer |
| Preconditions | None |
| Postconditions | 1. The User has a provisional account associated with their email address. <br> 2. receives email confirmation to activate their account. <br> |
Binary file added labreports/3.2 Lab2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
78 changes: 0 additions & 78 deletions labreports/LAB.md

This file was deleted.

Loading