From 8a0265dd0596a6498b5ca40a6349b15559cb9a5e Mon Sep 17 00:00:00 2001 From: leowyh Date: Thu, 24 Oct 2019 22:32:30 +0800 Subject: [PATCH] Updated Dev Guide, Changed Project Component to Model Component and added Project feature under Implementation --- docs/DeveloperGuide.adoc | 48 ++++++++++++++---- docs/images/AddProjectSeqDiagram.png | Bin 0 -> 33786 bytes ...ClassDiagram.png => ModelClassDiagram.png} | Bin 3 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 docs/images/AddProjectSeqDiagram.png rename docs/images/{ProjectClassDiagram.png => ModelClassDiagram.png} (100%) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index fe16245f9b..6fcccb7770 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -43,19 +43,47 @@ This will generate all resources required by the application and tests. == Design -[[Design-Logic]] -=== Project component -[[fig-ProjectClassDiagram]] -.Structure of the Project Component -image::ProjectClassDiagram.png[] - -. Both `Project Manager` and `Payment Manager` takes in user command from `Command`. -. The `Project Manager` class manages a HashMap of `Project` objects. -. Each `Project` object contains a `Budget` and a HashMap of `Payee` objects. +[[Design-Model]] +=== Model component +[[fig-ModelClassDiagram]] +.Structure of the Model Component +image::ModelClassDiagram.png[] + +. Both `ProjectManager` and `PaymentManager` takes in user input from `Command`. +. The `ProjectManager` class manages a HashMap of `Project` objects. +. Each `Project` object contains a `Budget` object and a HashMap of `Payee` objects. . Each `Payee` object contains a HashMap of `Payments` objects. -. The result of the command execution is encapsulated as a `Project` object by `PaymentManager` and passed back to `Command`. +. Results of the command execution by `ProjectManager` and `PaymentManager` are encapsulated as a `Project` and `Payments` objects respectively by `ProjectManager` and passed back to `Command`. == Implementation +This section explains how certain features of AlphaNUS are implemented. + +=== Project Feature +The `project` feature is managed by the `ProjectManager` class, which is called by the +`Process` class in the `Command` component. + +This feature supports the following commands: + +* `add project pr/PROJECT_NAME` -- Adds a new project to the record. +* `delete project pr/PROJECT_NAME` -- Deletes a project from the record. +* `goto project pr/PROJECT_NAME` -- Go to a project in the record. +* `list project` -- Lists all projects in the record. + +A detailed explanation of the use case for the `add project` command is given below to demonstrate how each component interacts with each other. + +1. User executes the command `add project pr/RAG` in the CLI. This input is passed from the `Ui` to `Command` where the input will be parsed to determine the command to execute. + +2. The `Command` component will process the `add project` command and execute it in the `Model` component, calling `ProjectManager` to add a new `Project` object with the user defined `PROJECT_NAME` to its HashMap of `Project` objects. + +3. `ProjectManager` then returns a value of the newly created `Project` object to `Command` which is passed to `Ui` for printing the project details to the user. + +Below is a sequence diagram to provide a visual representation of the `add project` command. + +[[fig-AddProjectSeqDiagram]] +.Sequence Diagram of the add project command +image::AddProjectSeqDiagram.png[] + +The `delete project` command is implemented in the same manner to the `add project` command. Both return the `Project` object that was deleted or added to be passed to `Ui` for printing its details to the user. The `delete project` command only differs from the `add project` command when it deletes the `Project` object from the HashMap of `Project` objects, in contrast to adding a `Project` object to the HashMap. == Documentation diff --git a/docs/images/AddProjectSeqDiagram.png b/docs/images/AddProjectSeqDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..05d5afa567c92c913bbfde915ef7feaecf67f00d GIT binary patch literal 33786 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 literal 0 HcmV?d00001 diff --git a/docs/images/ProjectClassDiagram.png b/docs/images/ModelClassDiagram.png similarity index 100% rename from docs/images/ProjectClassDiagram.png rename to docs/images/ModelClassDiagram.png