Commit 7f51f80

mo khan <mo.khan@gmail.com>
2020-11-15 02:24:34
refactor: extract And predicate main
1 parent 98256b5
Changed files (2)
domain/movie_library.go
@@ -48,6 +48,11 @@ func MovieReleasedAfter(year int) Predicate {
 		return m.Year > year
 	}
 }
+func MovieReleasedBefore(year int) Predicate {
+	return func(m Movie) bool {
+		return m.Year < year
+	}
+}
 
 func (self *MovieLibrary) FindAllMoviesByPixar() []Movie {
 	return self.FindAll(MovieProducedBy("Pixar"))
@@ -66,9 +71,7 @@ func (self *MovieLibrary) FindAllMoviesPublishedAfter2004() []Movie {
 }
 
 func (self *MovieLibrary) FindAllMoviesPublishedBetween1982And2003() []Movie {
-	return self.FindAll(func(x Movie) bool {
-		return x.Year > 1982 && x.Year < 2003
-	})
+	return self.FindAll(MovieReleasedAfter(1982).And(MovieReleasedBefore(2003)))
 }
 
 func (self *MovieLibrary) Add(movie Movie) {
domain/predicate.go
@@ -8,6 +8,12 @@ func (self Predicate) Or(other Predicate) Predicate {
 	}
 }
 
+func (self Predicate) And(other Predicate) Predicate {
+	return func(m Movie) bool {
+		return self(m) && other(m)
+	}
+}
+
 func (self Predicate) Not() Predicate {
 	return func(m Movie) bool {
 		return !self(m)