There's barely anything special about the features that Journal3 is offering, it's literally yet another journaling application.
What is special about it though (or at least what I think is special about it) is that at the same time it's also a thought experiment; an avenue to explore the what-ifs.
What if there's a way to code an Android application without any architecture? Relying instead on the good ol' software engineering patterns and object-oriented principles?
What if there's a way to bring the power and flexibility of declarative programming to the domain?
What if we treat objects with respect instead of merely thinking of them as dumb containers of data?
I do not intend to apply any kind of architecture to Journal3 nor am I trying to enforce any patterns within it. However, there is a common structure that you would come to realize when diving deeper into the codebase.
UseCaseas representation of business requirements/features
Eventas the dominant way of inter-objects communication
Routeras the primary enabler for navigation
Presenteras the renderer of objects (not to be confused with MVP)
One thing that I hope you'd also notice is that they are not necessarily architecture components, rather merely a byproduct of encapsulation.
- Full encapsulation of business requirements (including event handling) within
UseCaseclasses makes writing tests a breeze.
- Heavy reliance on interfaces at program boundaries allows for composable behaviors.
- Loosely-typed message passing allows for
Events not only to drive interactions but also to become a means of observability.
- Activities' sole purpose is to declare a
UseCaseand invoke it; keeping them light and concise.
Interested in joining this journey with me? Feel free to open up issues to start a discussion on anything related to Journal3. I also accept any kind of pull-requests that would help push this journey forward.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.