I'm creating a software that's supposed to accept a certain form of data and does something to the data. We decided to create a small dependency beforehand which will be used to make the development of the software smoother. We're planning to accept support for json, csv, yaml, and sql files/url's(consuming rest) and convert them to lists(
ArrayList). For now, we have the support for json. We've created a parent
Data Reader which contains two
getData method contracts, one for file uploads and one for url links - each returns json converted to a list. This is implemented by
JsonDataReader. It's working and perfectly usable. However, I have this as the code for the software:
list = JsonDataReader().getData(new File("file"));
I see this as a problem. If my software has this as a code, it means that it will only strictly accept Json. What if we create the
CsvDataReader, and much more? Is there a better way to design the multiple converter that will be implementable for the software development?
Process/Flow of software
- Upload file from upload page
- File can now be found in server directory
- In data processing page, the file is taken in and converted into the list as the code above shows.
Would it be better if I just create a component that accepts any data, detects the file type, converts it, and returns it as a list?
My colleague suggested this.
What you could do is you have something that stores all of your data readers in a map and the key is the file extension it basically then gets from the Map the appropriate DataReader based on the file type
Is this possible? To store
DataReaders as values? DataReaders are the converters.
My colleague also pointed out that if I go with the
DataReader that accepts anything and returns a list would be a case of multiple behaviors and not polymorphism - indicating a bad design.