Или есть более красивые способы это реализовать? Просто в фильтрах несколько десятков if-else и как-то логически хочется их организовать... Ессно реальные имена не содержат 1,2,3, а названы понятно.
type Constructor struct {
finished bool
result Result // любой нужный тип
}
func NewConstructor() Constructor { // метод для читабельности
return Constructor{finished: false}
}
func (c Constructor) RunChain1(needs parametrs...) Result {
complete := c.filter1(part parametrs).
filter2(part parametrs).
filter3()
if !complete.finished {
return Default()
}
return complete.result
}
func (c Constructor) filter1(part parametrs) Constructor {
if c.finished {
return c
}
... handler logic...
может поставить c.finished = true и вернуть с результатом или вернуть без результата
}
...
// может быть несколько RunChain и много filter
NewConstructor - звучит страшно. Конструктор для объекта Constructor... А в целом - да вроде неплохо. В чем смысл нескольких RunChain?
В другом месте понадобится немного изменённая цепочка, без одного фильтра.
А нужны вообще все эти объекты, цепочки? Много разных типов объектов планируется фильтровать? Если только один, то и абстракции на эту тему можно не делать
))) Это не вполном смысле цепочка обязанностей)) Там нет интерфейсов и абстракций) Просто способ из нескольких десятков if-else сделать читабельную логику
Ок. Иметь именованные фильтры, каждый из которых включает в себя несколько условий на одну тему - норм способ организации, как по мне
Обсуждают сегодня