Rystem.RepositoryFramework allows you to use correctly concepts like repository pattern, CQRS and DDD. You have interfaces for your domains, auto-generated api, auto-generated HttpClient to simplify connection "api to front-end", a functionality for auto-population in memory of your models, a functionality to simulate exceptions and waiting time from external sources to improve your implementation/business test and load test.
$ dotnet add package Rystem.RepositoryFramework.Cache.Azure.Storage.Blob.AddRepository<User, string>(repositoryBuilder =>
{
repositoryBuilder
.WithBlobStorage(storageBuilder =>
{
storageBuilder.Settings.ConnectionString = builder.Configuration["ConnectionString:Storage"];
});
repositoryBuilder
.WithInMemoryCache(x =>
{
x.ExpiringTime = TimeSpan.FromSeconds(60);
x.Methods = RepositoryMethods.Get | RepositoryMethods.Insert | RepositoryMethods.Update | RepositoryMethods.Delete;
})
.WithBlobStorageCache(
x =>
{
x.Settings.ConnectionString = builder.Configuration["ConnectionString:Storage"];
}
, x =>
{
x.ExpiringTime = TimeSpan.FromSeconds(120);
x.Methods = RepositoryMethods.All;
});
});
You always will find the same interface. For instance
IRepository<User, string> repository
or if you added a query pattern or command pattern
IQuery<User, string> query
ICommand<User, string> command