zmactep/ylab — pull request #21 by Feodorov (2014-12-01 20:39:00+00:00)
Title: Extractor & SangerUniversal applications refactoring + DataPreparationApplication

Посмотреть пример рефакторинга можно в `ExtractorApplication`. Кратко, на примере `ExtractorApplication`:
1. В `lib-run` сздаем модуль `yextract`. Ему в зависимости прописываем `ylib-run-core` - там базовые трейты `Job`, `Configuration`, `ConfigurationValidator` и StreamManager'ы
2. `yextractor` прописываем в `ylab-runner`
3. В `yextractor` создаем `package ru.biocad.run.yextractor`
4. Переносим из `Application` код валидации конфига в имплементацию трейта `ConfigurationValidator` - `ExtractorConfigurationValidator`, и case class конфига кладем рядом. В Application замиксуем `ExtractorConfigurationValidator`
5. Создаем `ExtractorJob`, имплементируя трейт `Job` и используя менеджеры ввода-вывода. В `YReader` добавил нужные implicit-конверсии и методы `asText`/`asBinary`
6. Итого, из Application вырезается валидация конфига (в `ExtractorConfigurationValidator`), сам конфиг, а метод `run` занимает 5 строчек, из которых 4 - создание и закрытие менеджеров ввода-вывода. Их можно создавать самостоятельно, а можно воспользоваться билдером для файлового ввода-вывода.
7. Не забываем про тест `ExtractorJobTest`.

Приложение `Extract` я протестировал и покрыл тестом, `SangerUniversal` лишь переписал (завтра напишу тест), но не запускал, а в `DataPreparation` набросал основной костяк приложения, осталось лишь дописать `Job` (там можно посмотреть как легко пайплайнятся тулы, но логика еще не реализована до конца)