I have a calendar event object. I have plans to make it compatible with CalDAV/iCal/vCal protocols/file formats, which require the event be serialized and de-serialized to and from different formats.
I could write an ImportICal, ExportICal, ImportVCal, ExportVCal, etc. set of methods, but that doesn’t seem like a very good approach, because what if the vCal format is updated, etc.
Has anyone dealt with this type of import/export situation before? If so, what design pattern (if any) is generally best?
Thanks for your help!
I am not particulary familiar with those formats but I’d create an simple data transfer object that represents your genereric calendar event object. It does nothing but holding the data (pseudocode):
Then you create an interface for CalendarEventReader and CalendarEventWriter (it’s Strategy pattern and maybe the Builder pattern, sort of):
Then have actual implementations implement the above interfaces. One for each format. You can even think about having reader and writer in the same class:
You’d then have a Repository (it’s the Factory pattern maybe with Singleton) that maintains a list of ICalenderEventReader/Writer implementations for the different formats: