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

Мне не нужно делать это очень часто, единственный случай, который у меня был, - это использовать Redux Devtools со средним программным обеспечением.

Я просто сделал:

const composeEnhancers = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;

Или вы можете сделать:

let myWindow = window as any;

, а затем myWindow.myProp = 'my value';

1
задан Hedhed 11 March 2019 в 14:10
поделиться

2 ответа

Я бы порекомендовал иметь интерфейс 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);
    (...)
}
0
ответ дан Jan Palas 11 March 2019 в 14:10
поделиться

Использование дженериков поможет вам начать. 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

0
ответ дан Andez 11 March 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: