Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

merging main to my branch #222

Merged
merged 194 commits into from
Nov 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
194 commits
Select commit Hold shift + click to select a range
24d5dac
Create WebRTC.md
davidlin2k Nov 15, 2023
b8be8bb
Added introduction in WebRTC.md
davidlin2k Nov 15, 2023
c0ca7a0
Update WebRTC.md
davidlin2k Nov 15, 2023
46a2019
initial commit
liu-samuel Nov 16, 2023
db0e324
initial commit
liu-samuel Nov 16, 2023
c5c1ebd
commit
liu-samuel Nov 16, 2023
337030e
GitHub pages
ICPRplshelp Nov 17, 2023
362c245
Merge branch 'learning-software-engineering:main' into main
davidlin2k Nov 17, 2023
9ebf96a
Update WebRTC.md
davidlin2k Nov 17, 2023
70210c0
Update WebRTC.md
davidlin2k Nov 17, 2023
4d867bd
Update WebRTC.md
davidlin2k Nov 17, 2023
5346ff7
Adding first version of A2 class wiki contribution.
colewiltse Nov 17, 2023
49965a4
Create Deploy_Node.js_AWS
Jazli14 Nov 17, 2023
3b24e9d
Update and rename Deploy_Node.js_AWS to Deploy_Node.js_AWS.md
Jazli14 Nov 17, 2023
4d2ce9f
Update Deploy_Node.js_AWS.md
Jazli14 Nov 17, 2023
5826268
Update Deploy_Node.js_AWS.md
Jazli14 Nov 17, 2023
3ba9fa8
Create Salesforce_Social_Login.md
MinGi-K Nov 18, 2023
2a30d9a
Update salesforce_api.md
MinGi-K Nov 18, 2023
d7c1300
Delete Topics/Tech_Stacks/Salesforce_Social_Login.md
MinGi-K Nov 18, 2023
f73c6be
Update salesforce_api.md
MinGi-K Nov 18, 2023
c3acc79
Update salesforce_api.md
MinGi-K Nov 18, 2023
690b9c2
Update salesforce_api.md
MinGi-K Nov 18, 2023
a055acd
Update and rename Deploy_Node.js_AWS.md to Deploy_Node.js_Docker_AWS.md
Jazli14 Nov 18, 2023
86ea484
Create Code_Smells.md
LiamOdero Nov 19, 2023
c957a13
Update Code_Smells.md
LiamOdero Nov 19, 2023
0ffdebb
Update Code_Smells.md
LiamOdero Nov 19, 2023
fa3d69c
Update Code_Smells.md
LiamOdero Nov 19, 2023
3fb2bf9
Update Code_Smells.md
LiamOdero Nov 19, 2023
1bb26ee
Update Development_Process.md
LiamOdero Nov 19, 2023
ac02000
Added first draft of Creating Your First Flutter App
danielqiuu Nov 19, 2023
6b6895f
Added a section about communicating tasks
alexma22 Nov 20, 2023
b0083c3
Update Code_Smells.md
LiamOdero Nov 20, 2023
c3471b4
Fixed some grammar as suggested.
alexma22 Nov 20, 2023
f741876
adding more context for JSON-RPC
liu-samuel Nov 20, 2023
bea5672
explaining benefis of jsonrpc
liu-samuel Nov 20, 2023
37dfe87
wip
liu-samuel Nov 20, 2023
05ab6fb
more info
liu-samuel Nov 20, 2023
679f897
change link
liu-samuel Nov 20, 2023
a4e8cc0
Added image and deeper explanation on how
alexma22 Nov 20, 2023
e5384f6
Create 'Localization in Software Engineering' guide and add its link …
ayanaar Nov 20, 2023
f3eb2fd
created md file
alyson647 Nov 20, 2023
f01cd40
add more info
liu-samuel Nov 20, 2023
84d415b
Merge branch 'main' into main
MinGi-K Nov 20, 2023
95329c3
More Descriptive "Testing Your App"
NonLan Nov 21, 2023
0472bbe
Table of contents
NonLan Nov 21, 2023
eca836a
fix table of contents
NonLan Nov 21, 2023
4a74561
Create Cypress.md
bw55555 Nov 21, 2023
1c6f92c
added basic structure for file
alyson647 Nov 21, 2023
683d758
wrote rough draft for some sections
alyson647 Nov 21, 2023
f4aea4b
unity intro first draft, without image
ruiting-chen Nov 21, 2023
6119799
completed rough drafts of artifcacts and events
alyson647 Nov 21, 2023
9186317
Added images and reformatted Unity_Intro.md
ruiting-chen Nov 21, 2023
099ce89
Update image sizes
ruiting-chen Nov 21, 2023
c9187ad
Update image size Unity_Intro.md
ruiting-chen Nov 21, 2023
f47878c
more rough draft and added links to resources
alyson647 Nov 21, 2023
ea9b1af
Merge branch 'learning-software-engineering:main' into main
NonLan Nov 21, 2023
1b04b8b
reorder
NonLan Nov 21, 2023
c1fae6c
Merge branch 'main' of https://github.com/NonLan/learning-software-en…
NonLan Nov 21, 2023
575b20f
Merge branch 'learning-software-engineering:main' into main
Jazli14 Nov 22, 2023
9276047
Update Deploy_Node.js_Docker_AWS.md
Jazli14 Nov 22, 2023
ef8a1c5
introduction and installation
lukecheseldine Nov 22, 2023
f5a2bd9
images
lukecheseldine Nov 22, 2023
5b2c52f
next steps
lukecheseldine Nov 22, 2023
4b90e22
edit wording and condensed parts
alyson647 Nov 22, 2023
13c1f94
changed wording and fixed typos
alyson647 Nov 22, 2023
fd9c222
removed resource i didn't use
alyson647 Nov 22, 2023
b28f091
updated resource names
alyson647 Nov 22, 2023
d3a7c34
added link to new md file
alyson647 Nov 22, 2023
34a4255
Merge branch 'main' into qiudanie-flutter
danielqiuu Nov 22, 2023
817e837
Fix formatting for md file
danielqiuu Nov 22, 2023
c0bf80e
Merge branch 'learning-software-engineering:main' into main
NonLan Nov 23, 2023
f242476
Update swift.md
NonLan Nov 23, 2023
cc73792
create JsonParsing.md
lunaseaa Nov 23, 2023
f051f4a
Merge branch 'main' into siqingxu-json
lunaseaa Nov 23, 2023
990f85e
Added brief explanation of e2e tests.
bw55555 Nov 23, 2023
8b825f9
Added comparison with other testing frameworks
bw55555 Nov 23, 2023
11176dd
Added more information to the use case.
bw55555 Nov 23, 2023
d3a00c8
Merge branch 'learning-software-engineering:main' into main
davidlin2k Nov 24, 2023
d520770
Create clean_architecture.md
Dario1031 Nov 24, 2023
c422869
Update PostgreSQL_psycopg2.md
PatrickFidler Nov 24, 2023
2bcc520
Merge branch 'learning-software-engineering:main' into main
Jazli14 Nov 24, 2023
7a6fdd5
Update Deploy_Node.js_Docker_AWS.md
Jazli14 Nov 25, 2023
3aff819
Merge branch 'main' into bw55555/cypress
bw55555 Nov 25, 2023
3c901ec
Update Tech_Stacks.md
bw55555 Nov 25, 2023
9952ed9
Add a bit of clarification
bw55555 Nov 25, 2023
9d8b763
Add table of contents
bw55555 Nov 25, 2023
271775f
reformat headers
bw55555 Nov 25, 2023
57d2c29
rearranged sections
alyson647 Nov 25, 2023
c7f0615
added table of contents
alyson647 Nov 25, 2023
a1b29a6
changed wording and added table of contents
alyson647 Nov 25, 2023
36ad3b6
adjusted table of contents
alyson647 Nov 25, 2023
fad3fc0
removed typo
alyson647 Nov 25, 2023
2f68b17
Merge branch 'main' into patch-1
Dario1031 Nov 25, 2023
ef65f30
Merge branch 'learning-software-engineering:main' into main
NonLan Nov 25, 2023
dce25cd
add picture to unit test
NonLan Nov 25, 2023
90cc701
Update Deploy_Node.js_Docker_AWS.md
Jazli14 Nov 25, 2023
57834d4
Introduction to the Scrum Framework (#162)
alyson647 Nov 25, 2023
399959f
Update clean_architecture.md
Dario1031 Nov 25, 2023
693a663
Update Deploy_Node.js_Docker_AWS.md
Jazli14 Nov 25, 2023
af36c9f
Making my file a .md file. Also adding for information on vs code and…
colewiltse Nov 25, 2023
e8a0e4b
add Tailwind Intro and Responsiveness doc
neecofabian Nov 25, 2023
1f632f2
Merge branch 'main' into patch-1
Dario1031 Nov 25, 2023
011f342
Tailwind Intro: address PR comments
neecofabian Nov 25, 2023
8ab7235
Introduction to E2E testing with cypress (#146)
bw55555 Nov 25, 2023
491700c
Merge branch 'learning-software-engineering:main' into main
NonLan Nov 25, 2023
1f40a52
Testing in Xcode - Adding to Swift.md (#170)
NonLan Nov 25, 2023
61a462b
Change in-line to md list
danielqiuu Nov 25, 2023
b474fef
Add missing list
danielqiuu Nov 25, 2023
7746e12
Added pictures!
danielqiuu Nov 25, 2023
ce07c36
Add pros and cons of flutter
danielqiuu Nov 26, 2023
ef0de44
Add final file structure
danielqiuu Nov 26, 2023
2a3b7ba
Added a subheader.
alexma22 Nov 26, 2023
5b42947
Update applications section
lunaseaa Nov 26, 2023
2ef2e1a
Update JsonParsing.md
lunaseaa Nov 26, 2023
16d6f3b
Update JsonParsing.md
lunaseaa Nov 26, 2023
2882308
Create Firebase_and_Firestore
NicholasMacasaet Nov 26, 2023
bf00c82
Rename Firebase_and_Firestore to Firebase_and_Firestore.md
NicholasMacasaet Nov 26, 2023
ed4f0d8
Update Firebase_and_Firestore.md
NicholasMacasaet Nov 26, 2023
120834d
Update Firebase_and_Firestore.md
NicholasMacasaet Nov 26, 2023
55e2e75
Update Firebase_and_Firestore.md
NicholasMacasaet Nov 26, 2023
d36c8dd
Update Firebase_and_Firestore.md
NicholasMacasaet Nov 26, 2023
c8d490f
Update Firebase_and_Firestore.md
NicholasMacasaet Nov 26, 2023
dafc245
Update Firebase_and_Firestore.md
NicholasMacasaet Nov 26, 2023
3b6b4c6
Merge pull request #1 from NicholasMacasaet/patch-2
NicholasMacasaet Nov 26, 2023
562eea6
Create Salesforce_Social_Login.md (#129)
MinGi-K Nov 26, 2023
5793570
Introduction to Tailwind and Responsiveness (#183)
neecofabian Nov 26, 2023
93a9fce
create JsonParsing.md (#168)
ccchwww Nov 26, 2023
9324d62
Merge branch 'main' into patch-1
Dario1031 Nov 26, 2023
5996fd6
Added a section about communicating task progress among team members.…
alexma22 Nov 26, 2023
7154693
Created Code_Smells.md (#139)
LiamOdero Nov 26, 2023
86628f9
bold some texts, add more resource for how to start making Unity game…
ruiting-chen Nov 26, 2023
da6bfa1
Add pics for license and editor installation add modules in Unity_Int…
ruiting-chen Nov 26, 2023
ebe3ba1
Fix typos Unity_Intro.md
ruiting-chen Nov 26, 2023
1f0e5cb
Unity ML-Agents basic tutorial
Dismany0 Nov 26, 2023
58feb4f
Create DigitalOcean_Web_App.md
ryukinouu Nov 26, 2023
062de61
Merge branch 'main' into patch-1
Dario1031 Nov 26, 2023
0bb6b37
Merge branch 'learning-software-engineering:main' into main
davidlin2k Nov 26, 2023
9d28af1
Add psycopg2 function example, additional resources clarity
PatrickFidler Nov 26, 2023
352a16c
Add flutter showcase and dart language similarities
danielqiuu Nov 26, 2023
aabb7ed
Merge pull request #2 from learning-software-engineering/main
NicholasMacasaet Nov 26, 2023
01bc5ee
Update Tech_Stacks.md
NicholasMacasaet Nov 26, 2023
e32c182
Update Firebase_and_Firestore.md
NicholasMacasaet Nov 26, 2023
4b4339b
Merge branch 'learning-software-engineering:main' into main
Jazli14 Nov 26, 2023
fe7c69f
Adding Deploy Node.js to AWS Markdown (#123)
Jazli14 Nov 26, 2023
d0fea6b
organized links for get started to make games in Unity
ruiting-chen Nov 26, 2023
c5f27f8
Update license pic position Unity_Intro.md
ruiting-chen Nov 27, 2023
99a7ba9
Update WebRTC.md with diagrams
davidlin2k Nov 27, 2023
24946b9
Added resources about WebRTC (#116)
davidlin2k Nov 27, 2023
aa5ea97
Update Tech_Stacks.md
davidlin2k Nov 27, 2023
b3f7d03
Added WebRTC to Topics (#206)
davidlin2k Nov 27, 2023
5c9490f
organized links for reference section
ruiting-chen Nov 27, 2023
fab1d8f
Merge branch 'unity-intro-ruiting' of https://github.com/ruiting-chen…
ruiting-chen Nov 27, 2023
26cf3c9
Expand Section 6 with details on automated localization and practical…
ayanaar Nov 27, 2023
c2fa378
Applied all requested changes / feedback
ICPRplshelp Nov 27, 2023
b16f77e
On GitHub pages (#126)
ICPRplshelp Nov 27, 2023
b348d6e
Merge branch 'main' into ayanaarahman/localization-in-software-engine…
ayanaar Nov 27, 2023
996a809
Create clean_architecture.md (#179)
Dario1031 Nov 27, 2023
0c3c97e
Update reference link format Unity_Intro.md
ruiting-chen Nov 27, 2023
6240554
Merge branch 'learning-software-engineering:main' into unity-intro-ru…
ruiting-chen Nov 27, 2023
9475345
add instructions for windows and mac installation
lukecheseldine Nov 27, 2023
2d18ade
add nginx page to development process table of contents
lukecheseldine Nov 27, 2023
d8f9d47
Merge branch 'introduction-to-nginx' of github.com:learning-software-…
lukecheseldine Nov 27, 2023
92b88f8
Update Tech_Stacks.md
ruiting-chen Nov 27, 2023
758d324
Added new line for image and added spaces after hashtag
danielqiuu Nov 27, 2023
93825b5
Update README.md
ruiting-chen Nov 27, 2023
36f9eb1
add Apache vs Nginx section
lukecheseldine Nov 27, 2023
c252995
Added Unity Intro (#149)
ruiting-chen Nov 27, 2023
d3b69f4
Fix hastag to be consistent
danielqiuu Nov 27, 2023
fa09286
Add example for translatable UI elements in Section 4
ayanaar Nov 27, 2023
e95448f
address pr comments
liu-samuel Nov 27, 2023
a688fd7
simplify terminology
liu-samuel Nov 27, 2023
74ef507
add info
liu-samuel Nov 27, 2023
e2b5857
add summary sentence
liu-samuel Nov 27, 2023
bd50923
add code blocks
liu-samuel Nov 27, 2023
d7c2900
Merge branch 'main' into samuel-liu-jsonrpc
liu-samuel Nov 27, 2023
c1408b0
Update Unity_ML_Agents.md
Dismany0 Nov 27, 2023
2c2e6a0
Merge branch 'main' into chensa12/unity-mlagents
Dismany0 Nov 27, 2023
8b082b0
Unity ML-Agents basic tutorial (#192)
ryukinouu Nov 27, 2023
3a522c5
Added Creating Flutter App to Wiki (#163)
danielqiuu Nov 27, 2023
09caf11
Merge branch 'main' into introduction-to-nginx
lukecheseldine Nov 27, 2023
0fa126a
Introduction to Nginx (#154)
lukecheseldine Nov 27, 2023
b7efce0
Enhance Software Engineering Resources with Localization Guide (#142)
ayanaar Nov 27, 2023
e9efc96
Adding Resources Regarding JSONRPC (#117)
liu-samuel Nov 27, 2023
4aa65f3
Update DigitalOcean_Web_App.md
ryukinouu Nov 27, 2023
3fbc36f
Update Firebase_and_Firestore.md
NicholasMacasaet Nov 27, 2023
e13b626
Update Firebase_and_Firestore.md
NicholasMacasaet Nov 27, 2023
2cab304
Updated Links
ryukinouu Nov 27, 2023
0dce35c
Fixed links 2
ryukinouu Nov 27, 2023
5357d6f
Update Tech_Stacks.md
NicholasMacasaet Nov 27, 2023
0811b47
Fixed spacing
ryukinouu Nov 27, 2023
cb23405
DigitalOcean Web Application Deployment Tutorial (#194)
ryukinouu Nov 27, 2023
8facf6d
Firebase files added (#186)
mistryrohan Nov 27, 2023
f3c7e42
Adding HTML guide to A2 class wiki contribution. (#121)
colewiltse Nov 27, 2023
549ceea
Update PostgreSQL_psycopg2.md (#180)
PatrickFidler Nov 27, 2023
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
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ Potential Topics--

7. React Native
1. Set up
8. Unity
1. Introduction to Unity Basics

- Software Tools
1. Git
Expand Down
67 changes: 45 additions & 22 deletions Topics/Development_Process.md
Original file line number Diff line number Diff line change
@@ -1,72 +1,95 @@
## Resources for Development Process

## Git

### [Learning Git](./Development_Process/Git/Git.md)

### [Trunk-Based Development](./Development_Process/Trunk_Development.md)

### [Django Project Deployment: AWS, Vercel, and Railway](./Development_Process/Django_Deployment_AWS_Railway_Vercel.md)

### [Automated Frontend Deployment with Vercel](./Development_Process/Frontend_Automated_Deployment_Vercel.md)

### [Flask Application Deployment on Heroku](./Development_Process/Flask_App_Deployment_Heroku.md)

### [Quality Assurance Testing](./Development_Process/QA_testing.md)

- [Automated Testing](./Development_Process/Automated_Testing.md)
- [Large Language Model (LLM) for Testing and Debugging](./Development_Process/LLM_Testing_Debugging.md)

### [Getting Started With Docker](./Development_Process/Docker.md)

### [Getting Started With WSL 2](./Development_Process/WSL.md)

## Nginx

### [Introduction to Nginx](./Development_Process/Nginx.md)

## Build requirements

### [Requirements.txt](./Development_Process/Build_Requirements/Requirements_txt.md)

## React Testing Library

### [React Testing Library](./Development_Process/React_Testing_Library.md)

## URL Sanitization

### [URL Sanitization](./Development_Process/URL_Sanitization.md)

## SOLID PRINCIPLES:
## SOLID PRINCIPLES:

SOLID is a mnemonic acronym that represents a set of five very important software development principles which lead to code that is easier to read, maintain, and extend, leading to higher-quality software that is easier to evolve over time.

The SOLID principles are:

- Single Responsibility Principle (SRP): A class should only have one cause to change, according to the Single Responsibility Principle (SRP). According to this theory, a class ought to have just one duty, which implies that there ought to be just one motivation for change. This makes the class more understandable, maintainable, and reuseable as well as more flexible.
- Single Responsibility Principle (SRP): A class should only have one cause to change, according to the Single Responsibility Principle (SRP). According to this theory, a class ought to have just one duty, which implies that there ought to be just one motivation for change. This makes the class more understandable, maintainable, and reuseable as well as more flexible.

- Open/Closed Principle (OCP): Software entities (classes, modules, functions, etc.) should be available for extension but closed for modification, according to the available/Closed Principle (OCP). According to this principle, a system should be able to introduce new functionality without requiring changes to the existing code. Interfaces, polymorphism, and generalization are used to accomplish this.

- Liskov Substitution Principle (LSP): Subtypes must be able to be used in place of their parent types. According to this concept, it should be possible to swap out objects from a superclass for objects from a subclass without having any negative effects on the program's correctness. This necessitates abiding by the superclass's compact.

- Interface Segregation Principle (ISP): Clients should not be forced to depend on interfaces they do not use. This principle states that a client should not be forced to implement an interface if it does not use all of the methods defined by the interface. This helps to avoid the creation of fat interfaces, which are interfaces that contain more methods than the client needs.

- Open/Closed Principle (OCP): Software entities (classes, modules, functions, etc.) should be available for extension but closed for modification, according to the available/Closed Principle (OCP). According to this principle, a system should be able to introduce new functionality without requiring changes to the existing code. Interfaces, polymorphism, and generalization are used to accomplish this.
- Dependency Inversion Principle (DIP): High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions. This principle suggests that classes should depend on abstractions rather than concrete implementations, which makes the system more flexible and easier to modify.

- Liskov Substitution Principle (LSP): Subtypes must be able to be used in place of their parent types. According to this concept, it should be possible to swap out objects from a superclass for objects from a subclass without having any negative effects on the program's correctness. This necessitates abiding by the superclass's compact.
## Resource that gives examples of the uses cases of SOLID principles

- Interface Segregation Principle (ISP): Clients should not be forced to depend on interfaces they do not use. This principle states that a client should not be forced to implement an interface if it does not use all of the methods defined by the interface. This helps to avoid the creation of fat interfaces, which are interfaces that contain more methods than the client needs.
LINK : https://www.youtube.com/watch?v=_jDNAf3CzeY

## Clean Architecture:

- Dependency Inversion Principle (DIP): High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions. This principle suggests that classes should depend on abstractions rather than concrete implementations, which makes the system more flexible and easier to modify.


## Resource that gives examples of the uses cases of SOLID principles
LINK : https://www.youtube.com/watch?v=_jDNAf3CzeY

## Clean Architecture:

A system's design that divides it into logical parts and specifies how those parts may communicate with one another is referred to as clean architecture. The objective is to make the software system easier to design, deploy, operate, and maintain while still keeping as many options open  for as long as possible.

Clean Architecture works on the well-defined division of layers. It is important to understand what the different layers are and which layers are allowed to interact with each other. The independence that clean architecute introduced to the a software system is vital since it reduces dependancies within the system. In clean architecture, the elements of the inner most layers should not have any information about the outermost layers. Anything declared in an outer layer must not be used anywhere within the inner layer of the code.

![image](https://user-images.githubusercontent.com/75923742/227027780-b5fbf347-ff78-49fa-a122-8f9ac4ef53d4.png)
![image](https://user-images.githubusercontent.com/75923742/227027780-b5fbf347-ff78-49fa-a122-8f9ac4ef53d4.png)

Some of the layers are (Simplified):

- Business Rules:

Some of the layers are (Simplified):
- Business Rules:
- Entity: A component of our computer system that represents a condensed set of critical business rules that are applied to crucial business data.
- Use Case: Gives specifics on the input the user must supply and the output the system must deliver to the user. Additionally, it includes the processing steps required to create the result.

- Entities: Contains functions, variables, and other structures that hold the main objectives of our application, they must be general and have the highest level of rules.
- Interface Adaptors: Responsible for communicating between the layers, takes data in and transforms it such that it can be sent to lower levels.
- Entities: Contains functions, variables, and other structures that hold the main objectives of our application, they must be general and have the highest level of rules.
- Interface Adaptors: Responsible for communicating between the layers, takes data in and transforms it such that it can be sent to lower levels.
- Framworks and Drivers: This section contains frameworks and databases responsible for communicating with the interface adapters.

This is only a simplification of what "Clean Architecture" is; the topic is so vast that there have been texts that have been dedicated to this topic. Some resources that can be beneficial in understanding and clearing up any doubts about the topic have been linked below.

This is only a simplification of what "Clean Architecture" is; the topic is so vast that there have been texts that have been dedicated to this topic. Some resources that can be beneficial in understanding and clearing up any doubts about the topic have been linked below.
- Text that goes into greater depth about each layer:

- Text that goes into greater depth about each layer:
- https://dev.to/rubemfsv/clean-architecture-the-concept-behind-the-code-52do#:~:text=The%20main%20rule%20for%20Clean,elements%20of%20an%20outermost%20layer.
- https://dev.to/rubemfsv/clean-architecture-the-concept-behind-the-code-52do#:~:text=The%20main%20rule%20for%20Clean,elements%20of%20an%20outermost%20layer.

- Article Summarizing Clean Architecture (Examples and Code)
- https://pusher.com/tutorials/clean-architecture-introduction/

- https://pusher.com/tutorials/clean-architecture-introduction/

- A very detailed explanation of Clean Architecture by Robert C. Martin or Uncle Bob and his book

- https://www.youtube.com/watch?v=2dKZ-dWaCiU
- https://github.com/ropalma/ICMC-USP/blob/master/Book%20-%20Clean%20Architecture%20-%20Robert%20Cecil%20Martin.pdf

## Code Smells
### [Code Smells](./Development_Process/Code_Smells.md)
37 changes: 37 additions & 0 deletions Topics/Development_Process/Code_Smells.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
## Code Smells
Code smells refer to certain types of code that, while functional, will require increasing accommodation as more code begins to rely on the "smelly" code. While it is possible to ignore these types of code, the longer that they remain, the harder it becomes to fix issues they directly or indirectly cause in the future. Therefore, it's in a developer's best interest to be familiar with a broad spectrum of code smells so that they may identify and eliminate them as soon as possible.


## A Motivating Example
Consider the following snippet of code:

```
class Something:
temp_field: int

def do_something(self) -> int | None:
if self.temp_field == None:
return None
else:
return self.temp_field + 1
```
On its own, this code is functional, but it raises a number of questions. For example: when exactly is `temp_field` equal to `None`? When does it actually store relevant data? This answer is largely dependant on how the class `Something` is used, but the specifics may not be clear to someone reading this code.

This code smell is known as a "Temporary Field", which is when classes are given attributes to be used in some of their methods, but in some cases the attribute stores null values. While adding null checks easily allows code using these attributes to function, it decreases code readability, and if the technique is abused it can easily lead to unnecessarily long code. To fix this, refactoring is required.

## Refactoring
Refactoring is a software development practice in which code is rewritten such that no new functionality is actually provided, but the code becomes cleaner and better accommodates future extensions of features. While it is generally recommended in software development that code should not be rewritten, but extended (see the [Open/Closed Principle of SOLID](../Development_Process.md#solid-principles), refactoring typically prevents more significant amounts of code rewriting that may be required in the future.

Many refactoring solutions to code smells are well-established and should be drawn upon once relevant code smells are identified. One such solution for the previous example is known as "Introduce Null Object", in which attributes that may be null should be defined over a new "Null" class, which can provide default values when the aforementioned attribute would have previously been null. This contains any null checks to the new class, allowing for the removal of if-statements in other code that may cause confusion or excessive code length. Furthermore, future code that may deal with the previously temporary field will also no longer need any null checks, as the new class does it for them. Thus, refactoring improved both the readability and extendability of the former code.

## Categories
While there may be many different types of code smells, all of them fall into one of five categories that can more easily be identified when writing code. The categories are as follows:
- Bloaters
- Object-Oriented Abusers
- Change Preventers
- Dispensables
- Couplers

## More Info
For further insight into all the different types of code smells including explanations, examples, and solutions, the following resource is highly recommended:
https://refactoring.guru/refactoring/smells
Loading
Loading