/// <summary>
        /// Find appropriate books through books collection.
        /// </summary>
        /// <param name="parameter">Criteria.</param>
        /// <param name="books">Collection.</param>
        /// <returns>Appropriate books collection.</returns>
        public IEnumerable <Book> FindBooks(IFinder <Book> predicate, AbstractBookStorage books)
        {
            IList <Book> allBooksInStorage = Refresh(books);
            List <Book>  findedBooks       = new List <Book>();

            foreach (var book in allBooksInStorage)
            {
                if (predicate.BookIsRight(book))
                {
                    findedBooks.Add(book);
                }
            }
            if (findedBooks.Count == 0)
            {
                throw new BookNotExistsException("Error: we could't find book(s) with such criteria.");
            }
            return(findedBooks);
        }
        /// <summary>
        /// Find appropriate books through books collection.
        /// </summary>
        /// <param name="parameter">Criteria.</param>
        /// <param name="books">Collection.</param>
        /// <returns>Appropriate books collection.</returns>
        public IEnumerable <Book> FindBooks(IFinder <Book> predicate, AbstractBookStorage books)
        {
            IList <Book> allBooksInStorage = Refresh(books);
            List <Book>  findedBooks       = new List <Book>();

            logger.Info($"Searching books by {predicate} criteria.");

            foreach (var book in allBooksInStorage)
            {
                if (predicate.BookIsRight(book))
                {
                    findedBooks.Add(book);
                }
            }
            if (findedBooks.Count == 0)
            {
                logger.Error("We can not find book(s) with such criteria.");
            }
            return(findedBooks);
        }