基于TMDB API的电影抽象模块是否违反接口隔离原则(ISP)?
关于BaseMovieRepository是否违反接口隔离原则(ISP)的分析
你的BaseMovieRepository抽象类没有违反ISP,原因如下:
- 先明确ISP的核心:客户端不应被迫依赖自己不需要的方法,核心是避免"胖接口",也就是接口里混入了调用方用不上的无关方法。
- 这个抽象类完全符合单一职责原则(SRP):所有方法都围绕「电影数据获取」这一个核心职责,不管是获取不同维度的电影列表(热映、热门、高分、即将上映),还是获取电影图片,都是电影领域内的相关操作,没有混入其他领域(比如剧集)的方法。
- 从依赖方的角度看,所有依赖这个抽象的客户端(比如电影列表页、电影详情页组件),都是和电影功能强相关的模块,不存在被迫依赖无关方法的情况。比如热映电影页面只需要调用
getNowPlaying(),它依赖这个抽象时,不需要去处理自己用不上的其他方法(抽象的实现由具体子类完成,客户端只调用自己需要的方法即可)。
如果未来你把剧集相关的方法(比如getTvPopular())加入这个抽象类,那才会违反ISP——因为电影模块的客户端会被迫依赖自己完全用不上的剧集方法,但目前的设计是没问题的。
附上你的抽象类代码:
abstract class BaseMovieRepository{ Future<List<Movie>> getNowPlaying(); Future<List<Movie>> getPopular(); Future<List<Movie>> getTopRated(); Future<List<Movie>> getUpcoming(); Future<List<MovieImage>> getMovieImages({required int movieId}); }
内容的提问来源于stack exchange,提问作者A-E
相关产品推荐
相关产品推荐

