2015-02-23 2 views
4

Я строю свою собственную аутентификацию на токене для asp.net web api 2, и у меня есть вопрос о классе user.Должен ли пользовательский класс реализовать IPrincipal и IIdentity

В настоящее время мой класс user реализует IPrincipal и IIdentity, но я не знаю, что является лучшей практикой. Не могли бы вы делить IPrincipal и IIdentity и сделать реализацию IIdentity членом IPrincipal?

В настоящее время я использую следующий класс декларации

class User : IPrincipal, IIdentity 

спасибо!

+0

Класс ** реализует ** интерфейс - он не ** наследует ** от него ... любой класс может только когда-либо ** наследовать ** из ** базового класса ** (но он может реализовать несколько интерфейсов) –

+0

Почему бы и нет? Это интерфейсы, они предназначены для реализации. Является ли ваш вопрос об осуществлении обоих интерфейсов в одном классе? – dasblinkenlight

ответ

3

ли вы разделить IPrincipal и IIdentity и сделать IIdentity реализации членом IPrincipal?

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

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

В дополнение к вышесказанному иметь в виду следующее:

Принцип интерфейса сегрегации (ISP) утверждает, что ни один клиент не должен быть вынуждены зависеть от методов не использует

Это один из пяти принципов SOLID, которые являются некоторыми основными принципами объектно-ориентированного программирования и дизайна.

Смежные вопросы