There are many reasons to avoid direct connection to the database. The first, is SQL injection, and our good friend Bobby Tables (look it up :-)
Beyond that, there are SO many reasons. It might seem like the easier or clearer path for you right now, but I promise it will lead to an app that will end up failing in the end and probably not deal with Magento platform upgrades well either.
You'd be creating an absolute ton of unnecessary work for yourself. You'd need to conduct many table joins at the store scope level to pull in product and category attributes. For attributes that are of the type dropdown, multiselect, etc, the value is an integer or sometimes a comma separated list of integers. You'd need to know which attribute is which, how to parse the raw value, and how to extract the proper public facing label for the current store view.
The things I mentioned above are just the tip of the iceberg. Magento is an event-based system. What I mean is when you load a product, category, or any entity, or call a collection, those functions trigger other necessary events to happen in order to return the information you seek. But beyond that, Magento has spent years perfecting all of these queries and events which means you don't need to spend countless hours making it all work.
From first hand experience, the very first thing I built for Magento, many years ago at this point, exclusively used direct database queries. I got stuck in my version of Magento, the app STILL breaks, is difficult to work on, and is an absolute nightmare.
Anyways, I hope I did a half-decent job on talking you out of it. If you have any questions please let me know.