我正在使用 TMDB API,该 API 有 2 个重要端点,一个用于电影,另一个用于系列。
现在正在制作电影,所以我制作了一个抽象层(模块)来从该 API 获取数据
问题是,该模块是否违反了 ISP?它看起来很胖,但我认为它符合单一责任原则(SRP),这意味着它没有违反 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});
}
看看
BaseMovieRepository
客户端,如果BaseMovieRepository
至少有一个客户端没有使用BaseMovieRepository
的所有方法,那么你就违反了接口隔离原则(ISP)(很可能你违反了该原则)。
我想首先提请您注意开闭原则(OCP)。如果您需要添加一个新方法,例如
getComedy()
,并且您想将该方法添加到 BaseMovieRepository
,那么您就违反了 OCP。
一个可能的解决方案可能是以下方法:
abstract class Movies {
Future<List<Movie>> list();
}
abstract class Movie {
Future<List<MovieImage>> images();
}
class PopularMovies implements Movies {
Future<List<Movie>> list() {
// implementation
}
}
class TopRatedMovies implements Movies {
Future<List<Movie>> list() {
// implementation
}
}
class UpcomingMovies implements Movies {
Future<List<Movie>> list() {
// implementation
}
}
// etc.