An open API service indexing awesome lists of open source software.

https://github.com/pjc0247/ct

Object Change Tracking in .NET
https://github.com/pjc0247/ct

csharp dotnet

Last synced: 11 months ago
JSON representation

Object Change Tracking in .NET

Awesome Lists containing this project

README

          

ct
====
Object Change Tracking in .NET

```cs
interface Item : IObserved {
int Quantity;
string Name;
}
interface Player : IObserved {
string Name;
ICollection Items;
}
```

__Property tracking__
```cs
var player = ObservedEntity.Create();
player.Name = "John Doe";
player.HasChanges; // TRUE

player.ConfirmChanges();
player.HasChanges; // FALSE
```

__Collection tracking__
```cs
var item = ObservedEntity.Create();
item.Name = "Sword";
item.Quantity = 10;
player.Items.Add(item);
player.HasChanges; // TRUE
```

__Deep tracking (Tracking Graph)__
```cs
player.ConfirmChanges();
player.HasChanges; // FALSE

player.Items[0].Quantity = 15;
player.HasChanges; // TRUE
```

__Change revisions__
```cs
var rev = player.UncommitedRevision;
foreach (var c in rev.Changes)
Console.WriteLine($"{c.Key}, {c.Prev} => {c.After}");

var revisions = player.Revisions;
Console.WriteLine(revisions.Revision); // Revision No.
```

Performance Consideration
----
`IObserved` objects do more stuffs for tracking changes. It's definetly slower than non-tracking objects. Please be aware of the performance and do not use this for heavily changing objects.