Even the data stream of a TCP connection is a projection of events, which is why (and how) we can reconstruct them by replaying captured segments.
So just because there are some lousy executions of a general architecture, doesn’t mean we should recoil from the basic idea.
My takeaway is that successful event-sourced structures are crafted for the domain they represent. I’ve developed a couple for my own work, for very specific aspects of an application, and they work well in context.
If your experience has been that a general-purpose ES framework leads to shitty, hard-to-maintain apps, I’d say that’s evidence for the corollary.
Gets more complicated when you add in distributed computing, redundancy etc... However those things are always complicated
However, just because you're using event sourcing doesn't mean you don't have a database with the current state of your entities.
class User < ActiveRecord::Base
has_paper_trail
end
That solution is good enough for most use cases and doesn't require highly skilled architects and developers to implement Event Sourcing properly.This is not very different from what a relational database does with redo logs. In fact, in a way, using event sourcing resembles composing a system from the fundamental building blocks of a traditional DBMS, in a distributed way.
Regarding logs, "traditionally", I'd use an audit/change history table for objects that needed one.
I can't shake off the project because it keeps getting stuck to the bottom of my shoe.