只读存储库(C)
存储库模式可用于将数据存储特定代码封装在指定组件中。应用程序中需要数据的部分仅适用于存储库。你将需要为存储的项目和数据库技术的每个组合创建一个存储库。
只读存储库可用于创建不允许操作数据的存储库。
接口
public interface IReadOnlyRepository<TEntity, TKey> : IRepository
{
IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter);
TEntity Get(TKey id);
}
public interface IRepository<TEntity, TKey> : IReadOnlyRepository<TEntity, TKey>
{
TKey Add(TEntity entity);
bool Delete(TKey id);
TEntity Update(TKey id, TEntity entity);
}
使用 ElasticSearch 作为技术的示例实现(使用 NEST)
public abstract class ElasticReadRepository<TModel> : IReadOnlyRepository<TModel, string>
where TModel : class
{
protected ElasticClient Client;
public ElasticReadRepository()
{
Client = Connect();
}
protected abstract ElasticClient Connect();
public TModel Get(string id)
{
return Client.Get<TModel>(id).Source;
}
public IEnumerable<TModel> Get(Expression<Func<TModel, bool>> filter)
{
/* To much code for this example */
throw new NotImplementedException();
}
}
public abstract class ElasticRepository<TModel>
: ElasticReadRepository<TModel>, IRepository<TModel, string>
where TModel : class
{
public string Add(TModel entity)
{
return Client.Index(entity).Id;
}
public bool Delete(string id)
{
return Client.Delete<TModel>(id).Found;
}
public TModel Update(string id, TModel entity)
{
return Connector.Client.Update<TModel>(
id,
update => update.Doc(entity)
).Get.Source;
}
}
使用此实现,你现在可以为要存储或访问的项目创建特定的存储库。使用弹性搜索时,通常一些组件应该只读取数据,因此应该使用只读存储库。