Özellikle bu biçimlere aşina değilim, ancak genel takvim etkinliğinizi temsil eden basit bir veri aktarım nesnesi oluşturabilirim. O (sözde kod) verilerini tutan başka bir şey yapar:
interface ICalendarEventReader
{
CalendarEvent Read(Stream data);
// Add additional methods if needed e.g.:
string GetTitleOnly(Stream data);
}
interface ICalendarEventWriter
{
Stream Write(CalendarEvent event);
// Add additional methods if needed e.g.:
Stream WriteSummaryOnly(CalendarEvent event);
}
:
class CalendarEvent
{
DateTime Date { get; }
string Title { get; }
string Description { get; }
}
Sonra CalendarEventReader ve CalendarEventWriter için bir arayüz oluşturmak (bu Strateji desen ve belki Oluşturucu desen, çeşit var)
Daha sonra, yukarıdaki uygulamalar, gerçek arayüzleri uygular. Her format için bir tane.
class CalDavConverter : ICalenderEventWriter, ICalendarEventReader
{
...
}
Ardından (o Singleton ile belki Fabrika desen var) bir Deposu olurdu ICalenderEventReader/Yazar uygulamalarının listesini tutar: Hatta aynı sınıfta okuyucu ve yazar olan düşünebildiğim farklı biçimleri için: (sizin durumunuzda takvim protokolleri) birden çok uygulamaları düzenlemek için
static class CalenderEventConverterRepository
{
static ICalendarEventReader GetReader(string formatName /*or any other data upon wich to decide wich format is needed*/)
{
...
}
static ICalendarEventReader GetWriter(string formatName /*or any other data upon wich to decide wich format is needed*/)
{
...
}
}
Okuyucu yazıcı arayüzlerinin oluşturucu olarak adlandırılabileceğini sanmıyorum. Ama bunun dışında, iyi bir tasarım önerisi için +1. – Tanmay
Kendi başıma bulduğum çözüm benzerdi (eksi fabrika kısmı). Müşteri kodu neye benziyordu? Takvim nesnesi bu fabrikayı kullanır mı yoksa istemci kodu kullanır mı? –