由于 fat 模块而违反接口隔离原则(ISP)

问题描述 投票:0回答:1

我正在使用 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});
}
flutter dart design-patterns solid-principles
1个回答
0
投票

看看

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.
© www.soinside.com 2019 - 2024. All rights reserved.