Welcome to TrackerDog!
TrackerDog works on seamlessly turning your .NET objects into change-tracked objects. It can track a full object graph, including collection properties.
TrackerDog is distributed as a NuGet package called TrackerDog. Follow this link to get installation instructions.
When implementing some design patterns like Unit of Work in a very seamless way, it is required that the whole Unit of Work could track object changes and produce new or updated object persistence actions in order to let a given peristence layer work on the so-called operations.
Most enterprise applications work with object-relational mappers (OR/M) like Entity Framework and NHibernate which, as full OR/M frameworks, can track persistent object changes and generate an underlying SQL INSERT, UPDATE or DELETE under the hoods thanks to their built-in change tracking.
At the end of the day, these OR/M frameworks implement change tracking turning your POCO class instances into proxies that intercept your POCO property changes and once you call the commit-specific method of their built-in unit of work they can persist changes to the database without your intervention.
So, what happens when you don't use an OR/M or, even worse: what happens when you don't use an OR/M but you want to implement an unit of work capable of tracking your POCO changes?
A good example of implementing a change tracking can be an unit of work to provide an abstraction layer over a NoSQL driver like Mongo, Couch, Cassandra, Redis... Even when some of them have some kind of atomically-executed set of commands, they will not track changes in your application layer. Actually there should be more possible use cases, but one of most important use cases is implementing a true domain-driven design architecture ensuring that a domain unit of work can track changes either when you use a regular data mapper (for which you won't use TrackerDog) or you want to implement repositories that return change-trackable domain objects!
Also, there's another example of a good case to implement change tracking using TrackerDog: UI data-binding. If you've already implemented many classes and you want them to be data-bound to a grid or any UI control, instead of wasting your time implementing INotifyPropertyChanged and INotifyCollectionChanged interfaces in all of them, just use TrackerDog and you'll get objects which implement these interfaces with zero effort!
In summary, TrackerDog turns your object graphs into interceptable object proxies that share a common change tracker which let you check what has changed in your objects or even accept or undo changes to a given object graph.
Hi! This is Matías Fidemraizer and I've fully architected/designed this project. If you want to contact me, you may find me on LinkedIn
Also, I'm a big fan of StackOverflow (click on the picture bellow to visit my profile there):