CSC207-UofT / course-project-minor-technologies

course-project-minor-technologies created by GitHub Classroom
0 stars 3 forks source link

The source of this file can be found under in Phase 2 as Design Document.md

Project Specifications

CSC207 Final Project

Submitted 05 December, 2021

Minor Technologies

Note: Project specifications have not changed since phase 0. Design changes and differences have mostly (if not all) been with implementation.

Authors: Jay Wang, Philip Harker, Mudit Chandna, Raghav Banka, Alexander Tran, Domenica Vega

Domain: Job searching and recruitment tailored towards the user.

Description: An application to make searching for interesting, relevant jobs easier by tailoring available jobs to the user. The application will take into account the user’s skills and assets, but also their personality in an attempt to match them with the jobs that they will enjoy the most.

Requirements:

Design Document

SOLID Principles

In the Score_Calculator module we make separate classes(handler_1, handler_2, and handler_3) to handle the score calculation for each attribute of the user, which follows the single responsibility principle. In future we will be extending the functionality for the calculation so to do that will be just creating new classes and not manipulating the abstract class which is in coherence with the open/closed principle.The code is also in agreement with the dependency inversion principle because all the handler classes depend on the handler abstract class which is then implemented by the handler main.

Note: in DataFormat, there is a method that could potentially be split into 2 separate methods to better adhere to the Single Responsibility Principle. Specifically LoadEntriesFromDirectory as while it doesn’t directly perform any reading and writing on it’s own, using FileIO to do so instead, FileIO potentially should have a method to return a list containing the data of each file in a directory.

Clean Architecture

The program packages are currently separated into the different clean architecture layers. With exception to accessing Constants, layers do not directly interact with layers not adjacent to itself. For example, UserManagement controller object uses a UserDB usecase object to store instances of Users as opposed to having a collection of users as an instance variable.

Design Patterns.

Creating Entry objects through deserialization in our program uses the Factory Design Principle. In UseCase.Factories contains Methods and objects that deserialize code. First, a map containing the entry data passed into ICreateEntry.create(), where it uses some portions of the data to determine which subclass should be created. Then, subclasses of ICreateEntry are used to create the final entry.

Any usecase objects that implements IEntryDatabase also has to implement the iterator design pattern. As these database objects will be a collection of Entry objects, it allows for iteration through the database. UserDB and JobListingDB both implement iterators.

For the Score_Calculator module, we implemented the chain of responsibility design pattern. There is a main handler class to send requests to the smaller handler that operates to calculate score on each attribute of the user. All the classes that do the calculation are extended from an abstract class. The processing of request goes on from one handler to the next till an end is reached.

Design Diagrams

CRC Cards from phase 0 were not really used beyond being an idea of how we should implement our code, and therefore did not receive updates since phase 0.

IntelliJ Generated Class Diagrams

Accessibility Report

As our frontend/UI had to be rushed for completion, it was primarily designed without consideration of the Principles of Universal Design.

Equitable Use

Flexibility in Use

Simple and Intuitive Use

Perceptible Information

Tolerance for Error

Low Physical Effort

Size and Space for approach and use

We would market our project to students (Undergraduate or Postgraduate) or more generally people who are looking for jobs. The most important part of any job application is the resume, which is required in almost every job. We have made the user input his/her resume in the form of various categories. Our project then will match the jobs tailored to the resume inputted by the user. This project will be marketed to mainly job-seekers who want to find jobs in which they have the best chance of being selected.

Our program is less likely to be used by people who have retired or by people who are currently employed and content with their job, since neither are not actively looking for jobs. In these cases, they would not be interested in looking at job listings and how these match their skills, experience, grades, etc.

Progress Report

Jay Wang

DemoSource package

Running the TotalDemo class in the Demo package gives a demo of the below features.

TotalDemo was created as a relatively simple program loop with implementations of how to use the below classes. It does not have a proper UI that adhers to Clean Archictecture or SOLID principles. It is there for the purposes of demonstration and testing features.

DemoJobListingSource and DemoSourceJobListing are objects used to simulate obtaining job listings from an external source. TotalDemo generates a SearchQuery, passed to a DemoJobListingSource to get results in the form of a HashMap, which is then processed into a JobListing object.

Entry

A Login/Token system

HTTP Requests

Testing

Documentation:

Helped with debugging frontend code, primarily related to handling HTTP Calls.

Minor changes to existing code, primarily renaming packages, and minor refactoring to simplify some code.

Significant Pull Request

Mudit Chandna

UI

Testing

Significant Pull Request

Raghav Banka, Domenica Vega

ScoreCalculator

Testing

Significant Pull Request [Domenica Vega]

Significant Pull Request [Raghav Banka]

Alexander Tran

Listings Processing

Testing

Significant Pull Requests

https://github.com/CSC207-UofT/course-project-minor-technologies/pull/53

Includes:

https://github.com/CSC207-UofT/course-project-minor-technologies/pull/29

Includes the first versions providing the necessary bases for ListingsProcessing that will work with the program.