Отлично, давайте разберемся с взаимодействием между классами в предложенной структуре программы. В этой структуре будет использоваться композиция, что означает, что экземпляры одних классов будут передаваться в другие классы в качестве аргументов конструктора или методов. Композиция предпочтительнее для создания модульной и гибкой архитектуры, поскольку она обеспечивает лучшее разделение ответственности и делает систему более гибкой.
-
Класс Configuration:
- Этот класс будет первым, который создастся. Он загрузит конфигурационные данные из файла или окружения.
-
Класс WebDriverWrapper:
- Экземпляр этого класса создается с помощью конфигурационных данных из
Configuration
для инициализации Selenium WebDriver.
- Экземпляр этого класса создается с помощью конфигурационных данных из
-
Класс ProductPageParser:
- Этот класс не зависит от других и будет инстанцироваться отдельно.
-
Класс DiscountFinder:
- Экземпляр этого класса создается с передачей экземпляров
WebDriverWrapper
иProductPageParser
в конструктор, чтобы обеспечить доступ к функциональности управления браузером и анализа страниц.
- Экземпляр этого класса создается с передачей экземпляров
-
Класс CSVWriter:
- Этот класс также инстанцировается отдельно и будет использоваться для записи данных в файл CSV.
-
Класс DiscountScraperController:
- Экземпляр этого класса создается с передачей экземпляра
Configuration
в конструктор. - Внутри
DiscountScraperController
, экземплярыWebDriverWrapper
,ProductPageParser
,DiscountFinder
, иCSVWriter
создаются и используются для координации процесса поиска и записи уцененных товаров.
- Экземпляр этого класса создается с передачей экземпляра
Взаимодействие между классами:
DiscountScraperController
играет роль оркестратора, создавая и используя экземпляры других классов для выполнения задач.DiscountFinder
зависит отWebDriverWrapper
для навигации по сайту и отProductPageParser
для анализа страниц и извлечения данных о товарах.CSVWriter
используетсяDiscountScraperController
для сохранения найденных данных в файл CSV.- Все классы используют данные из
Configuration
для конфигурации своего поведения, например, пути к драйверу браузера, URL-адреса сайтов и путь к выходному файлу CSV.
Эта структура обеспечивает четкое разделение ответственности и делает каждый компонент системы относительно независимым и заменяемым, что является хорошей практикой в объектно-ориентированном программировании.