Having a clean and maintainable codebase is most essential feature of a successful long term project. We at Pirai see our codebase as a reflection of our value. So we always prioritize having a clean and readable code structure. This way our codes are easily readable and scalable. Debugging for any fixes takes less time. Code reusability is another major advantage of having a clean codebase.
Website developments have moved from simple HTML pages to complex applications over last few years. Also the need for cross-platform developments raise day by day. With this functionality developers could deploy codes to different platforms such as iOS, Android and Web with a single codebase. Managing the codebase for such complex applications and making development easy was a difficult task.
Also, all the developed code should be future-proofed, so that any new developer could understand the programming logic easily. Few other risks we observed are code duplication, reduced scalability, hard to test and they are found to link directly with increased cost and reduced code quality.
We use Flutter for a complex application because of it cross-platform capabilities, fast development, high performance and customizable UI. To manage, maintain and scale up with our flutter code, we use Model-View-Controller (MVC) design pattern. Design pattern is some solutions or best practices achieved by expertise for a specific solution. These solutions are used to avoid same kind of flaws.
There are lot other frameworks like Model-View-View-Model (MVVM), Model-View-Presenter (MVP), Model-View-Intent (MVI), Flux and few more. Based on the application and development team’s choice we decided to go with MVC.
Before we move on to concepts of MVC, we should have an understanding of difference between a design pattern and software architecture. The table below states the differences.
Design pattern and software architecture are related topics but not the same.
Design patterns | Software architecture |
---|---|
Best practices or solutions to common problems that are discovered and documented by experienced developers | Process of designing and organizing the overall structure of a software system |
Specific solutions to specific problems | Broader framework and vision for the software system |
Help to improve the quality, maintainability, and scalability of software by providing standardized approaches to common problems | Helps to ensure that it meets the business and technical requirements |
MVC (Model-View-Controller) is a widely used design pattern in software developments which separates an entire application into three components that are interconnected together. The main focus of MVC is to separate the interfaces based on functionality, user interface, data management and control. This way the entire application is modularized. Developers can understand the codebase easily and help them to maintain with less mess.
MVC have three components and they are:
Model
View
Controller
Model represents the application’s data and business logic. It provides interface for accessing and modifying application’s data. The data sources may come from DB, API, JSON etc.
View is responsible for presenting the application’s data to the user. Basically it is about user interface. It interacts with user to display data and also gets inputs from user.
Controller is for managing the flow control of the application. It receives the input from user and performs a respective actions in response such as deleting a model or updating the view.
The workflow of MVC is explained below:
1. User interacts with application requesting for an info or for updating a module.
2. Controller receives the request, interprets the request. It gathers the required info and sends requests to Model.
3. Model updates the application with change request or gathers requested information.
4. Controller gets back the response.
5. View represents the use interface of the application. It retrieves the data from controller and displays to user.
6. User continuous to interact with the application and the cycle repeats.
Below are few benefits that Pirai experienced after adopting MVC design pattern:
MVC pattern helps to organize the code making it easier to manage, maintain and scale.
Separation of concerns - This design pattern separates the responsibilities of the application. So managing, displaying and interaction between those two takes place in more formatted terms. It aids in flexibility, reusability and easy to test.
Code reusability - By separating the application into various components, each module could be reused across different part of the application.
Scalability - Scaling and managing code as the application grow up becomes easy with various distinct components. Also modification becomes easy with the smaller components rather as a complex application as such.
Testability - By separating the application, developers could work independently to test and figure out bugs easily with smaller distinct components.
Flexibility - MVC allows working in changes on one portion without impacting the other.
Parallel development - Since the complex application is separated to smaller components, changes to each component can be done at same time all together speeds up the time to market factor.