Как предоставить единый интерфейс для извлечения и обновления ключа, значения?

#c#

#c#

Вопрос:

Я работаю над внедрением уровня сохраняемости для нашего приложения и разработал дизайн, в котором у меня есть поставщик, который позволяет клиенту обновлять один ключ, значение, а затем у меня также есть класс транзакции, с помощью которого я могу обновлять несколько пар ключ-значение.

Интерфейсы являются:

 public interface IStorageProvider
{
    bool GetValue<T>(string key, out T value);    
    T GetOrCreateValue<T>(string key) where T : new();    
    bool SetValue<T>(string key, T value);

    ITransaction Transaction();
}

public interface ITransaction : IDisposable
{
    event EventHandler<TransactionEventArgs> CommitSucceeded;
    event EventHandler<TransactionEventArgs> CommitFailed;

    bool GetValue<T>(string key, out T value);
    bool SetValue<T>(string key, T value);
    void Commit();
}
  

Мне не нравится, что провайдер и транзакция имеют похожие API, такие как GetValue и SetValue .

Я бы хотел, чтобы это был единый интерфейс и IStorageProvider и ITransaction вытекающий из этого. Что бы вы, ребята, порекомендовали?

Комментарии:

1. Все значения являются boolean ?

2. @ErikPhilips нет. Не уверен, почему вы об этом спрашиваете?

3. Я скучаю по чтению вашего интерфейса.

Ответ №1:

Я уверен, что вы открыли эту тему скорее для получения подтверждения, чем для того, чтобы не знать, что делать. Конечно, можно создать общий интерфейс для этих методов, я не вижу причин, почему бы этого не сделать, если вы поместите его в правильный проект и найдете подходящее имя.

Комментарии:

1. Я думал создать что-то вроде IKeyValueAccessor , а затем пусть IStorageProvider и ITransaction извлекать из этого.

2.@Monku должен признать, что это очень подходящее название! И, конечно, вы будете иметь это IStorageProvider и ITransaction внедрять. Вот почему я назвал это общим интерфейсом. В наши дни это обычная практика в ООП, посмотрите, например, на IList

3. Спасибо за ответ. Я ценю это.

4. Нет проблем, @Monku вот почему мы здесь.