🦠 A simple and fast (< 200ms) API for tracking the global coronavirus (COVID-19, SARS-CoV-2) outbreak. It's written in python using the 🔥 FastAPI framework. Supports multiple sources!
The data sources may change in the future, or maybe you want to change the service someday. Since in your code, service and data sources are combined together, the change of data sources will force the service to change.
What does this implement/fix? Explain your changes.
I apply bridge pattern so that service and data sources can vary independently.
I add a new interface named DataSourcesInterface, which has a method get_locations(). This class is responsible for getting data from different data sources. class JHULocations, CSBSLocations and NYTLocations represent three different data sources that will return us the locations, these three class implement this interface. LocationService is an abstract class, which is responsible for managing the services. I add a construct method which receives a class that implements DataSourcesInterface. So, its children can use this as an attribute. I add BasicLocationService class to implement LocationService class. It overwrites the get_all() methods and call the get_locations() methods in DataSourcesInterface interface. So, when there is any change to data source, we only need to change the parameter that are passed to children of LocationService class. Service and data source will change independently.
Reference Issues
The data sources may change in the future, or maybe you want to change the service someday. Since in your code, service and data sources are combined together, the change of data sources will force the service to change.
What does this implement/fix? Explain your changes.
I apply bridge pattern so that service and data sources can vary independently. I add a new interface named DataSourcesInterface, which has a method get_locations(). This class is responsible for getting data from different data sources. class JHULocations, CSBSLocations and NYTLocations represent three different data sources that will return us the locations, these three class implement this interface. LocationService is an abstract class, which is responsible for managing the services. I add a construct method which receives a class that implements DataSourcesInterface. So, its children can use this as an attribute. I add BasicLocationService class to implement LocationService class. It overwrites the get_all() methods and call the get_locations() methods in DataSourcesInterface interface. So, when there is any change to data source, we only need to change the parameter that are passed to children of LocationService class. Service and data source will change independently.
Any other comments?
Thank you for reading!