Skip to content
Draft
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
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,16 @@
# Dev-Journal
This repository is essentially a conversation with myself where I am listing the topics that I want to lean and understand. Over the period of time I want to write my notes in comments and increase the knowledge bank.
This repository is essentially a conversation with myself where I am listing the topics that I want to learn and understand. Over the period of time I want to write my notes in comments and increase the knowledge bank.

## Contents

### [Coding Patterns](./coding-patterns/)
Comprehensive documentation about different coding patterns used in software development:

- **[Design Patterns](./coding-patterns/design-patterns/)**: Classical software design patterns including Creational, Structural, and Behavioral patterns
- **[Architectural Patterns](./coding-patterns/architectural-patterns/)**: High-level patterns like MVC, MVP, MVVM, Microservices, and Event-Driven Architecture
- **[Programming Paradigms](./coding-patterns/programming-paradigms/)**: Different approaches to programming including OOP, Functional, Procedural, and Reactive Programming
- **[Code Organization Patterns](./coding-patterns/code-organization/)**: Patterns for organizing and structuring code including Module Pattern, Repository Pattern, and Dependency Injection

---

*This knowledge bank serves as a reference for understanding and implementing various concepts in software development.*
42 changes: 42 additions & 0 deletions coding-patterns/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Coding Patterns

This section contains documentation about different coding patterns that are commonly used in software development. Understanding these patterns is crucial for writing maintainable, scalable, and robust code.

## Table of Contents

### [Design Patterns](./design-patterns/)
Classical software design patterns that provide solutions to common design problems.

- **Creational Patterns**: Focus on object creation mechanisms
- **Structural Patterns**: Deal with object composition and relationships
- **Behavioral Patterns**: Focus on communication between objects and assignment of responsibilities

### [Architectural Patterns](./architectural-patterns/)
High-level patterns that define the overall structure of software applications.

- **MVC (Model-View-Controller)**
- **MVP (Model-View-Presenter)**
- **MVVM (Model-View-ViewModel)**
- **Layered Architecture**
- **Microservices**
- **Event-Driven Architecture**

### [Programming Paradigms](./programming-paradigms/)
Different approaches to programming and problem-solving.

- **Object-Oriented Programming (OOP)**
- **Functional Programming**
- **Procedural Programming**
- **Reactive Programming**

### [Code Organization Patterns](./code-organization/)
Patterns for organizing and structuring code for better maintainability.

- **Module Pattern**
- **Repository Pattern**
- **Dependency Injection**
- **Factory Pattern Implementation**

---

*This documentation serves as a reference guide for understanding and implementing various coding patterns in software development projects.*
121 changes: 121 additions & 0 deletions coding-patterns/architectural-patterns/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Architectural Patterns

Architectural patterns define the fundamental organization of software systems. They provide templates for organizing code at a high level and establish relationships between different components.

## MVC (Model-View-Controller)

**Purpose**: Separates application logic into three interconnected components.

**Components**:
- **Model**: Manages data and business logic
- **View**: Handles the presentation layer
- **Controller**: Manages user input and coordinates between Model and View

**Use Cases**:
- Web applications
- Desktop applications
- Mobile apps

**Benefits**:
- Separation of concerns
- Easier testing
- Parallel development

## MVP (Model-View-Presenter)

**Purpose**: Similar to MVC but the Presenter handles all UI logic.

**Key Differences from MVC**:
- View is more passive
- Presenter contains all presentation logic
- Better testability

**Use Cases**:
- Windows Forms applications
- Android applications (with Activities/Fragments)

## MVVM (Model-View-ViewModel)

**Purpose**: Separates business logic from UI through data binding.

**Components**:
- **Model**: Data and business logic
- **View**: UI components
- **ViewModel**: Binding layer between View and Model

**Use Cases**:
- WPF applications
- Angular applications
- React with state management

## Layered Architecture

**Purpose**: Organizes code into horizontal layers with specific responsibilities.

**Common Layers**:
1. **Presentation Layer**: UI and user interaction
2. **Business Layer**: Business logic and rules
3. **Data Access Layer**: Data persistence and retrieval
4. **Database Layer**: Data storage

**Benefits**:
- Clear separation of concerns
- Easy to maintain and test
- Scalable architecture

## Microservices Architecture

**Purpose**: Decomposes applications into small, independent services.

**Characteristics**:
- Service independence
- Technology diversity
- Decentralized governance
- Fault isolation

**Use Cases**:
- Large-scale applications
- Multi-team development
- Cloud-native applications

**Challenges**:
- Distributed system complexity
- Network latency
- Data consistency

## Event-Driven Architecture

**Purpose**: Uses events to trigger and communicate between services.

**Components**:
- **Event Producers**: Generate events
- **Event Consumers**: Process events
- **Event Brokers**: Route events

**Benefits**:
- Loose coupling
- Scalability
- Real-time processing

**Use Cases**:
- Real-time analytics
- IoT systems
- Notification systems

## Hexagonal Architecture (Ports and Adapters)

**Purpose**: Isolates core business logic from external concerns.

**Key Concepts**:
- **Ports**: Define interfaces
- **Adapters**: Implement interfaces
- **Core**: Business logic (isolated)

**Benefits**:
- Testability
- Technology independence
- Clean boundaries

---

*Choose the architectural pattern that best fits your application's requirements, team structure, and scalability needs.*
Loading