From c36f35257277c5b23e6d721ac93ffb871b8603b4 Mon Sep 17 00:00:00 2001 From: Simona Stojanovic Date: Wed, 8 Jun 2022 10:48:13 +0100 Subject: [PATCH] Add modularization LJ Change-Id: I17cf4bf6a9af7260602519c777748d7a4b3a5e6a --- docs/ModularizationLearningJourney.md | 247 ++++++++++++++++++++++++++ docs/images/modularization-graph.png | Bin 0 -> 35712 bytes 2 files changed, 247 insertions(+) create mode 100644 docs/ModularizationLearningJourney.md create mode 100644 docs/images/modularization-graph.png diff --git a/docs/ModularizationLearningJourney.md b/docs/ModularizationLearningJourney.md new file mode 100644 index 000000000..0a144ea2d --- /dev/null +++ b/docs/ModularizationLearningJourney.md @@ -0,0 +1,247 @@ +# Modularization learning journey + +In this learning journey you will learn about modularization, and the modularization strategy used +to create the modules in the Now in Android app. + + +## Overview + +Modularization is the practice of breaking the concept of a monolithic, one-module codebase into +loosely coupled, self contained modules. + + +### Benefits of modularization + +This offers many benefits, including: + +**Scalability** - In a tightly coupled codebase, a single change can trigger a cascade of +alterations. A properly modularized project will embrace +the [separation of concerns](https://en.wikipedia.org/wiki/Separation_of_concerns) principle. This +in turn empowers the contributors with more autonomy while also enforcing architectural patterns. + +**Enabling work in parallel** - Modularization helps decrease version control conflicts and enables +more efficient work in parallel for developers in larger teams. + +**Ownership** - A module can have a dedicated owner who is responsible for maintaining the code and +tests, fixing bugs, and reviewing changes. + +**Encapsulation** - Isolated code is easier to read, understand, test and maintain. + +**Reduced build time** - Leveraging Gradle’s parallel and incremental build can reduce build times. + +**Dynamic delivery** - Modularization is a requirement +for [Play Feature Delivery](https://developer.android.com/guide/playcore/feature-delivery) which +allows certain features of your app to be delivered conditionally or downloaded on demand. + +**Reusability** - Proper modularization enables opportunities for code sharing and building multiple +apps, across different platforms, from the same foundation. + + +### Modularization pitfalls + +However, modularization is a pattern that can be misused, and there are some gotchas to be aware of +when modularizing an app: + +**Too many modules** - each module has an overhead that comes in the form of increased complexity of +the build configuration. This can cause Gradle sync times to increase, and incurs an ongoing +maintenance cost. In addition, adding more modules increases the complexity of the project’s Gradle +setup, when compared to a single monolithic module. This can be mitigated by making use of +convention plugins, to extract reusable and composable build configuration into type-safe Kotlin +code. In the Now in Android app, these convention plugins can be found in +the [`build-logic` folder](https://github.com/android/nowinandroid/tree/main/build-logic). + +**Not enough modules** - conversely if your modules are few, large and tightly coupled, you end up +with yet another monolith. This means you lose some benefits of modularization. If your module is +bloated and has no single, well defined purpose, you should consider splitting it. + +**Too complex** - there is no silver bullet here. In fact it doesn’t always make sense to modularize +your project. A dominating factor is the size and relative complexity of the codebase. If your +project is not expected to grow beyond a certain threshold, the scalability and build time gains +won’t apply. + + +## Modularization strategy + +It’s important to note that there is no single modularization strategy that fits all projects. +However, there are general guidelines that can be followed to ensure you maximize its benefits and +minimize its downsides. + +A barebone module is simply a directory with a Gradle build script inside. Usually though, a module +will consist of one or more source sets and possibly a collection of resources or assets. Modules +can be built and tested independently. Due to Gradle's flexibility there are few constraints as to +how you can organize your project. In general, you should strive for low coupling and high cohesion. + +* **Low coupling** - Modules should be as independent as possible from one another, so that changes + to one module have zero or minimal impact on other modules. They should not possess knowledge of + the inner workings of other modules. + +* **High cohesion** - A module should comprise a collection of code that acts as a system. It should + have clearly defined responsibilities and stay within boundaries of certain domain knowledge. For + example, + the [`core-network` module](https://github.com/android/nowinandroid/tree/main/core-network) in Now + in Android is responsible for making network requests, handling responses from a remote data + source, and supplying data to other modules. + + +## Types of modules in Now in Android + +![Diagram showing types of modules and their dependencies in Now in Android](images/modularization-graph.png "Diagram showing types of modules and their dependencies in Now in Android") + +**Top tip**: A module graph (shown above) can be useful during modularization planning for +visualizing dependencies between modules. + +The Now in Android app contains the following types of modules: + +* The `app` module - contains app level and scaffolding classes that bind the rest of the codebase, + such as `MainActivity`, `NiaApp` and app-level controlled navigation. A good example of this is + the navigation setup through `NiaNavHost` and the bottom navigation bar setup + through `NiaTopLevelNavigation`. The `app` module depends on all `feature` modules and + required `core` modules. + +* `feature-` modules - feature specific modules which are scoped to handle a single responsibility + in the app. These modules can be reused by any app, including test or other flavoured apps, when + needed, while still keeping it separated and isolated. If a class is needed only by one `feature` + module, it should remain within that module. If not, it should be extracted into an + appropriate `core` module. A `feature` module should have no dependencies on other feature + modules. They only depend on the `core` modules that they require. + +* `core-` modules - common library modules containing auxiliary code and specific dependencies that + need to be shared between other modules in the app. These modules can depend on other core + modules, but they shouldn’t depend on feature nor app modules. + +* Miscellaneous modules - such as `sync`, `benchmark` and `test` modules, as well + as `app-nia-catalog` - a catalog app for displaying our design system quickly. + + +## Modules + +Using the above modularization strategy, the Now in Android app has the following modules: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name + Responsibilities + Key classes and good examples +
app + Brings everything together required for the app to function correctly. This includes UI scaffolding and navigation. + NiaApp, MainActivity
+ App-level controlled navigation via NiaNavHost, NiaTopLevelNavigation +
feature-1,
+ feature-2
+ ... +
Functionality associated with a specific feature or user journey. Typically contains UI components and ViewModels which read data from other modules.
+ Examples include:
+
    +
  • feature-author displays information about an author on the AuthorScreen.
  • +
  • feature-foryou which displays the user's news feed, and onboarding during first run, on the For You screen.
  • +
+
AuthorScreen
+ AuthorViewModel +
core-data + Fetching app data from multiple sources, shared by different features. + TopicsRepository
+ AuthorsRepository +
core-ui + UI components, composables and resources, such as icons, used by different features. + NiaIcons
+ NewsResourceCardExpanded +
core-common + Common classes shared between modules. + NiaDispatchers
+ Result +
core-network + Making network requests and handling responses from a remote data source. + RetrofitNiANetworkApi +
core-testing + Testing dependencies, repositories and util classes. + NiaTestRunner
+ TestDispatcherRule +
core-datastore + Storing persistent data using DataStore. + NiaPreferences
+ UserPreferencesSerializer +
core-database + Local database storage using Room. + NiADatabase
+ DatabaseMigrations
+ Dao classes +
core-model + Model classes used throughout the app. + Author
+ Episode
+ NewsResource +
core-navigation + Navigation dependencies and shared navigation classes. + NiaNavigationDestination +
+ + +## Modularization in Now in Android + +Our modularization approach was defined taking into account the “Now in Android” project roadmap, upcoming work and new features. Additionally, our aim this time around was to find the right balance between overmodularizing a relatively small app and using this opportunity to showcase a modularization pattern fit for a much larger codebase, closer to real world apps in production environments. + +This approach was discussed with the Android community, and evolved taking their feedback into account. With modularization however, there isn’t one right answer that makes all others wrong. Ultimately, there are many ways and approaches to modularizing an app and rarely does one approach fit all purposes, codebases and team preferences. This is why planning beforehand and taking into account all goals, problems you’re trying to solve, future work and predicting potential stepping stones are all crucial steps for defining the best fit structure under your own, unique circumstances. Developers can benefit from a brainstorming session to draw out a graph of modules and dependencies to visualize and plan this better. + +Our approach is such an example - we don’t expect it to be an unchangeable structure applicable to all cases, and in fact, it could evolve and change in the future. It’s a general guideline we found to be the best fit for our project and offer it as one example you can further modify, expand and build on top of. One way of doing this would be to increase the granularity of the codebase even more. Granularity is the extent to which your codebase is composed of modules. If your data layer is small, it’s fine to keep it in a single module. But once the number of repositories and data sources starts to grow, it might be worth considering splitting them into separate modules. + +We are also always open to your constructive feedback - learning from the community and exchanging ideas is one of the key elements to improving our guidance. + diff --git a/docs/images/modularization-graph.png b/docs/images/modularization-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..028320e7c3fab9f98197a2ad89869a4d5de136de GIT binary patch literal 35712 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 literal 0 HcmV?d00001