Journal3
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?
Structure
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.
UseCase
as representation of business requirements/featuresEvent
as the dominant way of inter-objects communicationRouter
as the primary enabler for navigationPresenter
as 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.
Highlights
- Full encapsulation of business requirements (including event handling) within
UseCase
classes makes writing tests a breeze. - Heavy reliance on interfaces at program boundaries allows for composable behaviors.
- Loosely-typed message passing allows for
Event
s not only to drive interactions but also to become a means of observability. - Activities' sole purpose is to declare a
UseCase
and invoke it; keeping them light and concise.
Contributing
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.
License
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/>.