Mobile Development Platforms and Common Software Architecture Patterns used
Published: 2024-07-01 14:42:20

Let's begin by breaking down the group of keywords; the first part mobile development platforms refers to a type of software that allows a business to rapidly build, rest and deploy mobile applications for smartphones, they are software programs that provide tools and resources for building mobile applications for various operating systems such as iOS, Android and Windows so in short mobile development platforms are special toolkits for creating apps for your smartphone. These platforms have features like drag-and-drop tools, visual editors, and testing tools that can speed up the process of making an app. Most of these platforms focus on Android or iOS development which are the two leading mobile operating systems this is known as a Native app; it can take advantage of all features offered by that specific OS and its hardware but at the cost of time and resources, in addition to having operating system specific SDKs native mobile development requires an integrated development environment (IDE). Android apps use Android Studio or IntelliJ IDEA while iOS apps use Xcode or AppCode
However, some platforms allow for building applications that can work on both systems these are known as cross-platform apps examples are Flutter, React Native, and Xamarin; they target different operating systems with just one codebase, these apps are created using cross-platform frameworks that use platform-specific SDKs from a unified API, IDEs that support cross-platform frameworks include VS Code, Android Studio, Atom. Many mobile application development platforms include tools for testing, optimization, and debugging.
The second group of keywords is Software Architecture Patterns; an architecture pattern is a set of guidelines and practices that describe how best to structure and organize code, data, and components, it is basically a blueprint for the app making it easier to develop, maintain, and scale. Three of the most common architecture patterns for mobile development are:
Model-View-Controller (MVC)
**MVC** is a software architecture pattern that separates an application into three main components: Model, View, and Controller, making it easier to manage and maintain the codebase. It also allows for the reusability of components and promotes a more modular approach to software development. Using **MVC** as the software architecture, developers end up with the following difficulties:

Most of the core business logic resides in the Controller. During the lifetime of an application, this file grows bigger and it becomes difficult to maintain the code.
Because of tightly coupled UI and data access mechanisms, both Controller and View layers fall into the same activity or fragment. This causes problems in making changes in the features of the application.
It becomes hard to carry out Unit testing of the different layers as most of the part that are under testing needs Android SDK components

2. Model-View-Presenter (MVP)
**MVP** is a new architecture that separates an application into three parts: Model, View, and Presenter. This is similar to **MVC** but puts more responsibility on the Presenter to manage the interaction between Model and View. **MVP** pattern overcomes these challenges of **MVC** and provides an easy way to structure the project codes. The reason why **MVP** is widely accepted in that it provides modularity, testability, and a more clean and maintainable codebase. It is composed of the following three components:
Model: Layer for storing data. It is responsible for handling the domain logic(real-world business rules) and communication with the database and network layers.
View: UI(User Interface) layer. It provides the visualization of the data and keeps track of the user's actions to notify the Presenter.
Presenter: Fetch the data from the model and apply the UI logic to decide what to display. It manages the state of the View and takes actions according to the user's input notification from the View.

My HNG Internship Journey
My name is Barnabas Adedokun, I am a mobile developer with almost a year of experience writing Dart and Flutter. I am very excited to start this journey with the internship program now as I initially joined an earlier iteration of the program but due to my unseriousness, I wasn't able to follow through so when I got the mail about a new cohort starting I quickly decide not to miss out this time and clicked the link in my mail redirected me to the page https://hng.tech/internship, when I saw the offers on the premium option at https://hng.tech/premium I immediately clicked that but was unable to go for that due financial constraints. I want to do the internship because I'm at a point in my career as a mobile dev where I need more hands-on experience that I can follow at my own pace with some set time bounds of course and me importantly I need projects that I can add to make my resume stand out from others when applying for jobs.
I'm not really sure how to conclude but hopefully I'm able to complete the program and get a job as a cross-platform mobile developer at Google or Meta or something lol.