Как создать хранилище CRUD, когда идентификаторы сущностей имеют разные типы (string / int)? - PullRequest
1 голос
/ 11 марта 2019

Я довольно новичок в REST apis и мне интересно, как лучше всего создать CRUD-репозиторий, который обрабатывает сущности с Ids / первичными ключами разных типов: Car с int, Person с строкой и Address, который состоитиз двух разных строк (адрес и почтовый индекс).Я создал IRepository

public interface IRepository<EntityBase>
    {
        Task<PayoutResult> Insert(EntityBase entity);
        bool EntityExists(EntityBase entity);
    }

И заставил все модели реализовать EntityBase, но я не уверен, как должен выглядеть BaseEntity, когда у них всех есть три разных типа идентификаторов?

Ответы [ 2 ]

5 голосов
/ 11 марта 2019

Я бы порекомендовал иметь inteface IEntity, например:

public interface IEntity<TKey> where TKey : IEquatable<TKey>
{
    TKey Id { get; set; }
}

Все сущности должны реализовать этот интерфейс, и тогда у вас может быть IRepository, например:

public interface IRepository<TEntity, in TKey> where TEntity : IEntity<TKey> where TKey : IEquatable<TKey>
{
    (...)
    Task<TEntity> GetByIdAsync(TKey id);
    void Insert(TEntity entity);
    (...)
}
1 голос
/ 11 марта 2019

Использование дженериков поможет вам начать.TId указывает тип идентификатора.

public class EntityBase<TId>
{
    public TId Id {get; set;}
}

public interface IRepository<TId>
{
    Task<PayoutResult> Insert(EntityBase<TId> entity);
    bool EntityExists(EntityBase<TId> entity);
}

Лично я ненавижу универсальный репозиторий.Зачем?Это скользкий склон.Я чувствую, что это плохой выбор дизайна.У нас есть приложение с этим повсюду, и это кошмар, чтобы поддерживать.Универсальный репозиторий также не следует принципу разделения .

Стартер для 10

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...