Types Of Software Architecture
Tags: designpatterns, softwaredevelopment, software, patterns
Published: 2024-06-27 20:57:53


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ex31431o57j2sx7jpfq.jpg)

### MVC Model View Controller:

![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/fc0c446d-b6f3-43a5-addf-2ab2aac80953/84ef95a3-e7f0-4edf-af79-c1591dcdfc0e/Untitled.png)

The Model-View-Controller (MVC) design pattern is an architectural pattern used in software engineering to separate concerns within an application, promoting organized and modular development. This pattern divides an application into three interconnected components:

- Model: Represents the application's data and business logic.

- View: Displays the data to the user.

- Controller: Handles user input and interactions, updating the model and view accordingly.


### Model-View-Presenter:

![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/fc0c446d-b6f3-43a5-addf-2ab2aac80953/9d47b774-4a25-482c-b72f-ccaf54e70a83/Untitled.png)

The Model-View-Presenter (MVP) design pattern is another architectural pattern used in software engineering, similar to MVC but with some key differences. It also promotes separation of concerns, making the codebase more manageable and scalable. The main components in MVP are:

- Model: Represents the application's data and business logic.

- View: Displays the data to the user and handles user interaction.

- Presenter: Acts as an intermediary between the model and the view, handling all the logic and communication between them.


### Model-View-View-Model :

![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/fc0c446d-b6f3-43a5-addf-2ab2aac80953/538f316e-a348-4393-a15d-2d1c931f528d/Untitled.png)

The Model-View-View-Model (MVVM) design pattern is a structural design pattern specifically designed for UI development, primarily used in applications with a rich user interface such as WPF (Windows Presentation Foundation), Silverlight, and increasingly in web and mobile app development frameworks like Angular, React, and Xamarin. MVVM separates the development of the graphical user interface from the development of the business logic or back-end logic (the data model).

- Model: Represents the application's data and business logic.

- View: Represents the UI components and is responsible for rendering the data to the user.

- View-Model: Acts as an intermediary between the View and the Model, handling the presentation logic and exposing data to the View.

### Model-View-ViewModel-Coordinator :

![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/fc0c446d-b6f3-43a5-addf-2ab2aac80953/9fe9ce27-5697-44d9-8b34-20220eb5a6a5/Untitled.png)

The Model-View-ViewModel-Coordinator (MVVM-C) design pattern is an extension of the MVVM pattern, often used in iOS development to further separate concerns and improve the maintainability of code. The addition of the Coordinator component helps manage navigation and the flow of screens in the application, making the MVVM-C pattern particularly useful for complex applications with multiple view transitions.

- Model: Represents the application's data and business logic.

- View: Represents the UI components and is responsible for rendering the data to the user.

- ViewModel: Acts as an intermediary between the View and the Model, handling the presentation logic and exposing data to the View.

- Coordinator: Manages the navigation flow and coordination between different parts of the application.

### View-Interactor-Presenter-Entity-Router:

![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/fc0c446d-b6f3-43a5-addf-2ab2aac80953/8b9847ca-6b22-43cf-b4ad-6b7594bd4a62/Untitled.png)

VIPER (View, Interactor, Presenter, Entity, Router) is a design pattern commonly used in iOS development to create a modular and testable architecture. It aims to separate concerns more explicitly than other patterns like MVC, MVP, or MVVM, promoting single responsibility for each component and facilitating better maintainability and scalability of the code.

- View: Responsible for the user interface and user interaction.

- Interactor: Contains the business logic and handles the data.

- Presenter: Acts as a mediator between the View and the Interactor, handling the presentation logic.

- Entity: Represents the data models used by the Interactor.

- Router: Manages navigation and routing between different modules or screens.

- Entity: Represents the data models used by the Interactor.

- Router: Manages navigation and routing between different modules or screens.