Трябва ли потребителският клас да изпълнява IPrincipal и IIdentity

Създавам собствено удостоверяване, базирано на токени, за asp.net web api 2 и имам въпрос относно класа user.

В момента моят user клас прилага IPrincipal и IIdentity, но не знам коя е най-добрата практика. Бихте ли разделили IPrincipal и IIdentity и бихте ли направили изпълнението IIdentity член на IPrincipal?

В момента използвам следната декларация на клас

class User : IPrincipal, IIdentity

Благодаря ти!


person BendEg    schedule 23.02.2015    source източник
comment
Класът имплементира интерфейс - не наследява от него ... всеки клас може да наследява само от единствен< /b> базов клас (но може да реализира множество интерфейси)   -  person marc_s    schedule 23.02.2015
comment
Защо не? Това са интерфейси, те са предназначени да бъдат внедрени. Въпросът ви за внедряването на двата интерфейса в един и същи клас ли е?   -  person Sergey Kalinichenko    schedule 23.02.2015


Отговори (1)


Бихте ли разделили IPrincipal и IIdentity и бихте ли направили изпълнението на IIdentity член на IPrincipal?

Не мисля, че това е добър подход, тъй като ако Identity беше подобно на IPrincipal, не би трябвало да има причина за разделянето.

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

В допълнение към горното имайте предвид следното:

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

Това е един от петте принципа на SOLID, които са някои основни принципи на обектно ориентирано програмиране и дизайн.

person Christos    schedule 23.02.2015