From 020cd3aec7e1015d63a62c0bdbb0d1e95bb10472 Mon Sep 17 00:00:00 2001 From: Anatolii Hrynchuk Date: Wed, 6 May 2026 01:25:49 +0300 Subject: [PATCH] docs: add class diagram wiki page --- Class-Diagram.md | 125 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 Class-Diagram.md diff --git a/Class-Diagram.md b/Class-Diagram.md new file mode 100644 index 0000000..4aaa92c --- /dev/null +++ b/Class-Diagram.md @@ -0,0 +1,125 @@ +# Class Diagram + +Full class and interface hierarchy for `HrynCo.DAL.Abstract` and `HrynCo.DAL.EF`. + +```mermaid +classDiagram + namespace HrynCo_DAL_Abstract { + class IEntity { + <> + +object Id + +DateTimeOffset Created + +DateTimeOffset? Updated + } + class IEntityTId { + <> + +TId Id + } + class EntityTId { + <> + +TId Id + +DateTimeOffset Created + +DateTimeOffset? Updated + } + class Entity { + <> + +Guid Id + } + class NamedEntity { + <> + +string Name + } + class IUnitOfWork { + <> + +BeginTransactionAsync() Task~ITransaction~ + +GetCurrentTransaction() ITransaction? + +ExecuteInTransactionAsync(action) Task + +ExecuteInTransactionAsync~TResult~(action) Task~TResult~ + } + class ITransaction { + <> + +CommitAsync() Task + +RollbackAsync() Task + +DisposeAsync() ValueTask + } + class PagedResultT { + <> + +IReadOnlyList~T~ Items + +int Page + +int PageSize + +int TotalCount + } + } + + namespace HrynCo_DAL_EF { + class IEfRepository { + <> + +ClearChangeTracker() + } + class IEfRepositoryTEntityTId { + <> + +Add(entity) TEntity + +AddAsync(entity) Task~TEntity~ + +Delete(id) + +DeleteAsync(id) Task + +Get(filter, orderBy, includes) IQueryable~TEntity~ + +GetAll() IQueryable~TEntity~ + +GetAllAsync() Task~List~TEntity~~ + +GetById(id) TEntity? + +GetByIdAsync(id) Task~TEntity?~ + +Exists(id) Task~bool~ + +UpdateAsync(entity) Task + +SaveChangesAsync() Task + } + class IEfRepositoryTEntity { + <> + } + class BaseEfRepositoryTDbContextTEntityTEntityId { + <> + +TDbContext DbContext + +Add() TEntity + +AddAsync() Task~TEntity~ + +Delete() + +DeleteAsync() Task + +Get() IQueryable~TEntity~ + +GetAll() IQueryable~TEntity~ + +GetAllAsync() Task~List~TEntity~~ + +GetById() TEntity? + +GetByIdAsync() Task~TEntity?~ + +Exists() Task~bool~ + +Update() + +UpdateAsync() Task + +SaveChangesAsync() Task + #DoRemove() + } + class BaseRepositoryTEfRepositoryTDbContextTEntityTEntityId { + <> + #EfRepository TEfRepository + #CreateEfRepository()* TEfRepository + } + class EfUnitOfWorkTDbContext { + +BeginTransactionAsync() Task~ITransaction~ + +GetCurrentTransaction() ITransaction? + +ExecuteInTransactionAsync() Task + } + class EfTransactionAdapter { + +CommitAsync() Task + +RollbackAsync() Task + +DisposeAsync() ValueTask + } + } + + IEntityTId --|> IEntity : extends + EntityTId ..|> IEntityTId : implements + Entity --|> EntityTId : extends (TId=Guid) + NamedEntity --|> Entity : extends + + IEfRepositoryTEntityTId --|> IEfRepository : extends + IEfRepositoryTEntity --|> IEfRepositoryTEntityTId : extends (TId=int) + BaseEfRepositoryTDbContextTEntityTEntityId ..|> IEfRepositoryTEntityTId : implements + BaseRepositoryTEfRepositoryTDbContextTEntityTEntityId --> BaseEfRepositoryTDbContextTEntityTEntityId : uses (lazy) + + EfUnitOfWorkTDbContext ..|> IUnitOfWork : implements + EfTransactionAdapter ..|> ITransaction : implements + EfUnitOfWorkTDbContext --> EfTransactionAdapter : creates +``` \ No newline at end of file