美文网首页
iOS设计原则之接口隔离原则

iOS设计原则之接口隔离原则

作者: 点滴86 | 来源:发表于2024-04-12 21:23 被阅读0次

接口隔离原则

接口隔离原则的英文是Interface Segregation Principle,缩写为ISP。英文描述为Clients should not be forced to depend upon interfaces that they do not use。翻译成中文就是:客户端不应该被强迫依赖它不需要的接口。客户端可以理解为接口的调用者或者使用者。
微服务用户系统提供了一组跟用户相关的API给其他系统使用,比如:注册、登录、获取用户信息等。代码如下

@protocol DMUserService <NSObject>

- (BOOL)registerWithCellPhone:(NSString *)cellPhone password:(NSString *)password;

- (BOOL)loginWithCellPhone:(NSString *)cellPhone password:(NSString *)password;

- (DMUserInfo *)getUserInfoByUserId:(NSString *)userId;

- (DMUserInfo *)getUserInfoByCellPhone:(NSString *)cellPhone;

@end

@interface DMUserServiceImpl : NSObject <DMUserService>

@end


@implementation DMUserServiceImpl

- (BOOL)registerWithCellPhone:(NSString *)cellPhone password:(NSString *)password {
    return YES;
}

- (BOOL)loginWithCellPhone:(NSString *)cellPhone password:(NSString *)password {
    return YES;
}

- (DMUserInfo *)getUserInfoByUserId:(NSString *)userId {
    DMUserInfo *userInfo;
    
    return userInfo;
}

- (DMUserInfo *)getUserInfoByCellPhone:(NSString *)cellPhone {
    DMUserInfo *userInfo;
    
    return userInfo;
}

@end

现在我们的后台管理系统要实现删除用户的功能,希望用户系统提供一个删除用户的接口。这个时候我们该如何做呢?你可能说,这不是很简单吗,只需要在DMUserService中添加一个- (BOOL)deleteUserByUserId:(NSString *)userId或者- (BOOL)deleteUserByCellPhone:(NSString *)cellPhone接口就可以了。这个方法可以解决问题,但是也隐藏了一些安全隐患。
删除用户是一个非常重要的操作,我们只希望通过后台管理系统来执行,所以这个接口只限于给后台管理系统使用。如果我们把它放到DMUserService中,那所有使用到DMUserService的系统,都可以调用这个接口。不加限制地被其他业务系统调用,就可能导致误删除用户。
我们参照接口调用隔离原则,调用者不应该强迫依赖它不需要的接口,将删除接口单独放到另一个接口DMRestrictedUserService中,让后将DMRestrictedUserService只打包提供给后台管理系统来使用。代码如下

@protocol DMUserService <NSObject>

- (BOOL)registerWithCellPhone:(NSString *)cellPhone password:(NSString *)password;

- (BOOL)loginWithCellPhone:(NSString *)cellPhone password:(NSString *)password;

- (DMUserInfo *)getUserInfoByUserId:(NSString *)userId;

- (DMUserInfo *)getUserInfoByCellPhone:(NSString *)cellPhone;

@end

@protocol DMRestrictedUserService <NSObject>

- (BOOL)deleteUserByUserId:(NSString *)userId;

- (BOOL)deleteUserByCellPhone:(NSString *)cellPhone;

@end

@interface DMUserServiceImpl : NSObject <DMUserService, DMRestrictedUserService>

@end

@implementation DMUserServiceImpl

- (BOOL)registerWithCellPhone:(NSString *)cellPhone password:(NSString *)password {
    return YES;
}

- (BOOL)loginWithCellPhone:(NSString *)cellPhone password:(NSString *)password {
    return YES;
}

- (DMUserInfo *)getUserInfoByUserId:(NSString *)userId {
    DMUserInfo *userInfo;
    
    return userInfo;
}

- (DMUserInfo *)getUserInfoByCellPhone:(NSString *)cellPhone {
    DMUserInfo *userInfo;
    
    return userInfo;
}

- (BOOL)deleteUserByUserId:(NSString *)userId {
    return YES;
}

- (BOOL)deleteUserByCellPhone:(NSString *)cellPhone {
    return YES;
}

@end

如果部分接口只被部分调用者使用,我们就需要将这部分接口隔离出来,单独给这部分调用者使用,而不强迫其他调用者也依赖这部分不被用到的接口。

相关文章

  • 接口隔离原则

    个人博客原文:接口隔离原则 设计模式六大原则之四:接口隔离原则。 简介 姓名 :接口隔离原则 英文名 :Inter...

  • 【设计模式】接口隔离原则

    以下内容来自《Java设计模式》 1 接口隔离原则 接口隔离原则定义如下: 接口隔离原则(Interface Se...

  • 六大设计原则-接口隔离原则【Interface Segregat

    六大设计原则 单一职责原则 里式替换原则 依赖倒置原则 接口隔离原则 迪米特原则 开闭原则 接口隔离原则 定义: ...

  • 聊聊设计模式原则(三) -- 依赖倒置原则

    目录 聊聊设计模式原则(一) -- 单一职责原则 聊聊设计模式原则(二) -- 接口隔离原则 聊聊设计模式原则(三...

  • 聊聊设计模式原则(二) -- 接口隔离原则

    目录 聊聊设计模式原则(一) -- 单一职责原则 聊聊设计模式原则(二) -- 接口隔离原则 聊聊设计模式原则(三...

  • 聊聊设计模式原则(一) -- 单一职责原则

    目录 聊聊设计模式原则(一) -- 单一职责原则 聊聊设计模式原则(二) -- 接口隔离原则 聊聊设计模式原则(三...

  • 设计模式的设计原则

    设计模式的设计原则 面向对象五大设计原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 开闭原则 设计模...

  • 设计原则之接口隔离原则

    1. 定义 客户端不应该被强迫依赖它不需要的接口。其中的“客户端”,可以理解为接口的调用者或者使用者。 在这条原则...

  • 设计原则之接口隔离原则

    本文是极客时间里王争专栏《设计模式之美》的学习笔记,你可以通过链接阅读原文[http://gk.link/a/10...

  • 面试题

    1>面向对象设计原则 单一职责原则,开闭原则,依赖倒置原则(面向接口编程),迪米特原则,里氏替换原则,接口隔离原则...

网友评论

      本文标题:iOS设计原则之接口隔离原则

      本文链接:https://www.haomeiwen.com/subject/xeckxjtx.html