@littledragon
Нуб

Как лучше реализовать интерфейс и класс?

Всем привет.
В моем приложении мне необходимо работать с API различных сервисов. Интерфейс для работы с этими API один. В нем определены методы проверки маркера доступа, получения определенных сущностей.
В чем проблема: интерфейс будет использоваться в приложении и в одном сервисе. В приложении будет нужно вызывать какие-то методы API от имени определенного пользователя. Например:
IApiClient apiClient; //резолвится с помощью Unity
if(apiClient.IsCurrentUserTokenValid()){
  var entities = apiClient.getEntities();
 //code
}

Unity будет резолвить IApiClient и передавать в конструктор ApiClientImpl маркер доступа текущего пользователя.
Кроме того, IApiClient будет использоваться в сервисе. Там необходимо будет пробегать по большому количеству пользователей, проверять их маркеры доступа, выполнять какие-то действия с API от имени разных пользователей. Пользователей может быть очень много.
Можно было бы сделать класс ApiClientImpl статическим, но я читал, что резолвить такую штуку c IoC не очень круто. Можно сделать обычный класс, но тогда для каждого пользователя необходимо будет создать экземпляр ApiClientImpl (а пользователей очень много). Не будет ли это нагружать сервак? Последний вариант, над которым я думал - сделать часть методов статическими. Но не знаю нормальным ли является этот вариант. В итоге будет что-то такое:
public interface IApiClient{
// токен текущего пользователя
string AccessToken{get;set;}

// проверяет валидность токена для текущего пользователя
bool IsCurrentUserTokenValid();

// [static] проверяет валидность токена
bool IsUserTokenValid(string token);

// получает сущности текущего пользователя
IEnumerable<Entity> GetCurrentUserEntities(EntityParams params);

// [static] получает сущности пользователя
IEnumerable<Entity> GetUserEntities(string token, EntityParams params); 
}

Методов в интерфейсе много, не будет ли это как-то избыточно писать какой-то метод для текущего пользователя и статический для всех?
Вроде все просто, но я уже третий день не могу придумать как лучше сделать. Help me!
  • Вопрос задан
  • 306 просмотров
Пригласить эксперта
Ответы на вопрос 2
Руководство по разработке библиотек классов
- Правила разработки типов
--Выбор между классами и интерфейсами
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Ничего не понял если честно. На мой взгляд проверка токена - проблема аутентификации, GetCurrentUserEntities - что-то похожее на получение данных. Вам не кажется что вы в одном интерфейсе смешиваете несколько логических конструкций? Если у вас в интерфейсе много методов - скорее всего вы что-то делаете не так. Для чего вам статический класс? ради экономии ресурсов? вы можете Unity настроить так чтобы объект нужного вам интерфейса реализовывал паттерн - синглтон. Ну или сами его реализуйте. Будет объект в единственном экземпляре и прекрасно резолвится и мокируется.
Зачем вы в методы передаете токен? для авторизации? вы на каждом вызове метода чтоли будете проверять валидность токена? Вот первый результат простейшего запроса в яндексе.

Как итог - на мой взгляд у вас проблема не в интерфейсе, а в голове. Вы слабо представляете архитектуру того что делаете и смешиваете все в одну кучу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы