From c53ef792c82179afc388f7432b17922da4c08ead Mon Sep 17 00:00:00 2001 From: Morgan-Sell Date: Wed, 20 Nov 2024 09:15:31 -0800 Subject: [PATCH] updated the README --- README.md | 28 +++++++++++++++++++++------- static/img/mvc.png | Bin 0 -> 39710 bytes 2 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 static/img/mvc.png diff --git a/README.md b/README.md index df9dce6..d4b32d5 100644 --- a/README.md +++ b/README.md @@ -114,16 +114,30 @@ Access the application in your browser at `http://127.0.0.1:5001` - Route handling and logic in `auth_controller.py` and `tasks_controller.py`. #### Benefits: -- Clear separation of concerns. -- Improved maintainability and scalability. - -## Repository Design Pattern + - **Separation of Concerns:** Each component (Model, View, Controller) handles a distinct responsibility, avoiding overlap and reducing complexity. + - **Improved Maintainability:** Changes to one layer (e.g., UI updates in the View) have minimal impact on others (e.g., Model or Controller). + - **Scalability:** Enables the application to grow by adding new features or modules without disrupting existing functionality. + - **Parallel Development:** Different teams can work on the UI, business logic, and database layers independently. + +### MVC Design Pattern Visualization + +

+ MVC +

+ +_Source: Geeks for Geeks_ + +### Repository Design Pattern - **Repositories:** - `UsersRepository`: Handles CRUD operations for user accounts. - `TasksRepository`: Abstracts database logic for task management. -- **Advantages:** - - Centralized data access logic. - - Simplified testing by isolating database operations. + +#### Benefits: + - **Centralized Data Logic:** All database interactions are handled in repository classes, ensuring a clean separation of concerns. + - **Easier Data Source Configuration:** Switching or adding new data sources (e.g., from PostgreSQL to MySQL) requires minimal changes in the repository layer only. + - **Support for Multiple Data Sources:** Easily integrate and manage relational databases alongside external APIs or NoSQL databases. + - **Simplified Testing:** Mocking repositories during tests avoids the need for live database connections. + - **Reusability and Consistency:** Shared repository methods reduce duplication and streamline database operations. ## Configuration - Set environment variables in a `.env` file, including: diff --git a/static/img/mvc.png b/static/img/mvc.png new file mode 100644 index 0000000000000000000000000000000000000000..e65fcd3ed7b0ebfd6b54dbf65c56becc0e2b551f GIT binary patch literal 39710 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≶ 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 >c5;{n2MHR7 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