PLRelational
While working on the next major version of VoodooPad, an observation was made: user interfaces are basically just bidirectional transformation functions, taking data from some source and presenting it to the user, and vice versa. It sounds so simple when boiled down like that, but the reality of app development is a different story, often filled with twisty, error-prone UI code, even with the help of functional programming aids (e.g. Rx and its ilk). A question then emerged: can we build a library that allows us to express those transformations in a concise way, with an eye towards simplifying app development?
PLRelational is our (exploratory) answer to that question. At its core, PLRelational is a Swift framework that allows you to:
- declaratively express relationships using relational algebra
- asynchronously query and update those relations
- observe fine-grained deltas when a relation’s data has changed
Update (2017-08-28): Mike Ash:
This article will give an overview of the basics of relational algebra in a way that programmers can easily understand, aimed at explaining the foundations that PLRelational is built on. Terminology will match what PLRelational uses.
Update (2017-08-31): Chris Campbell:
Before looking into all the goodies that PLRelational and PLRelationalBinding have to offer, it helps to first understand how the core
Relation
classes compute and deliver changes.
Update (2017-09-11): Mike Ash:
We’ve been talking a lot lately about PLRelational and all the fancy stuff it does. However, we’ve been glossing over a fundamental part of it: how it actually stores data. After all, PLRelational is a data persistence framework at its core.