Какой шаблон разработки я должен использовать для импорта/экспорта?

Я использую java.awt.Robot. Не хорошо, не легок, но работает каждый раз.

Профессионалы:

  • Вы сознаете ситуацию
  • Очень быстры
  • Сборка Ваш собственный FWK
  • , Портативный
  • Никакие внешние зависимости

Недостатки:

  • Никакой хороший GUI для создания теста
  • необходимо оставить GUI в покое, в то время как Вы тестируете
  • Сборка Ваш собственный FWK
  • , Трудный изменить тестовый код и создать Ваш первый ремень безопасности

Теперь, если бы у Вас есть бюджет, я пошел бы для LoadRunner. Лучше всего в классе.

(Раскрытие: отношения к компании, которая владеет LR, но я работал с LR перед отношениями)

12
задан Brandon Montgomery 17 November 2009 в 22:23
поделиться

3 ответа

Я не особо знаком с этими форматами, но я бы создал простой объект передачи данных, который представляет объект вашего общего календарного события. Он ничего не делает, кроме хранения данных (псевдокод):

class CalendarEvent
{
    DateTime Date { get; }
    string Title { get; }
    string Description { get; }
}

Затем вы создаете интерфейс для CalendarEventReader и CalendarEventWriter (это шаблон Strategy и, возможно, шаблон Builder , вроде того):

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 CalDavConverter : ICalenderEventWriter, ICalendarEventReader
{
    ...
}

Тогда у вас будет репозиторий (это шаблон Factory , возможно, с Singleton ), который поддерживает список Реализации ICalenderEventReader / Writer для разных форматов:

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*/)
    { 
    ...
    }
}
19
ответ дан 2 December 2019 в 18:54
поделиться

Если формат vCal обновлен, вам придется изменить любой код, который вы написали, в зависимости от того, какой шаблон проектирования вы используете (если только они не решат переключиться на что-то вроде ASN.1, где обновления запекаются) .

Я бы создал интерфейс формата с методами импорта и экспорта и, возможно, с метаданными и методами для проверки того, может ли случайный бит XML соответствовать этому формату. Затем для каждого формата у вас есть объект, реализующий этот интерфейс. Это своего рода «шаблон разработки стратегии», но каждый формат представляет несколько стратегий для выполнения связного набора вещей (импорт, экспорт, обнаружение), а не наличия отдельных объектов стратегии.

0
ответ дан 2 December 2019 в 18:54
поделиться

Обычный способ организовать несколько реализаций (календарные протоколы в вашем случае) с одним общим интерфейсом - Шаблон моста .

0
ответ дан 2 December 2019 в 18:54
поделиться