Паттерн «Конвеер»
От: vsb Казахстан  
Дата: 26.04.08 04:05
Оценка:
После анализа приложения оказалось, что в нём данные идут следующим образом: сначала читаются строки из одной таблицы, проводится их первичная валидация, строки объединяются по специальному признаку, на группе строк проводится валидация, группа строк анализируется и строится граф объектов, во время построения опять же проводится валидация, итоговый граф опять валидируется и результат записывается в БД.

Подумав я решил применить знакомый из Unix-а принцип конвеера:

RowLoader -[Row]-> RowValidator -[Row]-> RowGrouper -[RowGroup]-> RowGroupValidator -[RowGroup]-> BusinessObjectBuilder -[BusinessObject]-> BusinessObjectValidator -[BusinessObject]-> BusinessObjectSaver

На каждом этапе валидации, при невалидном входном объекте на выход ничего не подаётся, иначе объект проходит без изменения.

Для этого был сделан мини-фреймворк:

interface Receiver<T> {
    void receive(T obj);
    void receiveEnd();
}

interface Destination<T> {
    void send(T obj);
    void sendEnd();
}

interface Sender<T> {
    void setDestination(Destination<T> destination);
}


и несколько вспомогательных классов.

В итоге каждый этап обрабоки представлен отдельным объектом, который знает только про свой вход и выход, про соседей он ничего не знает, т.е. достигается хороший decoupling и testability.

Мне сама идея понравилась, но смущает то, что я не встречал её раньше. Какие могут возникнуть проблемы с этим решением?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.