Software architecture design patterns - shibotsu/obs-clone GitHub Wiki

MVC Architecture – Advantages and Disadvantages

  • For our project, we used the MVC (Model-View-Controller) architectural pattern. MVC separates the application into three main parts: the model (which handles data), the view (which displays the user interface), and the controller (which manages the logic and user input).

Advantages:

  • Clear separation of concerns makes the code easier to understand and maintain.

  • It is easier for multiple developers to work on the project at the same time, since each part can be developed independently.

  • Testing is simpler because business logic is separated from the user interface.

Disadvantages:

  • For smaller projects, MVC can introduce unnecessary complexity.

  • Changes in the user interface often require changes in the controller, which can make maintenance harder.

  • Controllers can become too large and difficult to manage if not properly organized.

  • We chose MVC because it is well-suited for web applications of medium complexity and allows for good code organization.

Microservices Architecture – A Possible Better Choice

  • It might have been even better to use a microservices architecture for our project. Microservices split the application into smaller, independent services that communicate over a network.

  • This approach allows each service to be developed, deployed, and scaled separately. Microservices are especially useful for large and complex systems that need to handle many users and features. If our project grows in the future, switching to microservices could bring more flexibility and scalability.

Advantages:

  • Each part of the application can be developed, deployed, and updated separately.

  • If one service fails, the rest of the system can continue to work.

  • Teams can use different technologies and programming languages for different services.

  • The system is easier to scale, because only the necessary services need more resources.

Disadvantages:

  • Setting up and managing many services is more complex than a single application.

  • Communication between services can be slower and more difficult to coordinate.

  • Debugging and testing the whole system can be more challenging.

  • It requires good planning and experience to design a reliable microservices system.