170 похожих чатов

Как бы вы отнеслись к такой конструкции мини-цепочек обязанностей?


Или есть более красивые способы это реализовать? Просто в фильтрах несколько десятков 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

5 ответов

13 просмотров

NewConstructor - звучит страшно. Конструктор для объекта Constructor... А в целом - да вроде неплохо. В чем смысл нескольких RunChain?

Борис-Пол Автор вопроса
Mikhail Efimov
NewConstructor - звучит страшно. Конструктор для о...

В другом месте понадобится немного изменённая цепочка, без одного фильтра.

Борис Пол
В другом месте понадобится немного изменённая цепо...

А нужны вообще все эти объекты, цепочки? Много разных типов объектов планируется фильтровать? Если только один, то и абстракции на эту тему можно не делать

Борис-Пол Автор вопроса
Mikhail Efimov
А нужны вообще все эти объекты, цепочки? Много раз...

))) Это не вполном смысле цепочка обязанностей)) Там нет интерфейсов и абстракций) Просто способ из нескольких десятков if-else сделать читабельную логику

Борис Пол
))) Это не вполном смысле цепочка обязанностей)) Т...

Ок. Иметь именованные фильтры, каждый из которых включает в себя несколько условий на одну тему - норм способ организации, как по мне

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта