Re[58]: Годами не могу вырваться из некорректных вопросов на
От: Poopy Joe Бельгия  
Дата: 30.04.20 09:23
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Poopy Joe, Вы писали:


S> то есть часть про "if done poorly" вы пропустили. Ну, ок. С такой оговоркой я согласен.

Как же я пропустил, если специально цитату привел? Весь смысл в том, что даже плохо выполненный рефакторинг, все равно рефакторинг. В твоей вселенной это нечто невозможное, по определению.

S>Я согласен с преимуществом простых определений. Но вы начинаете строить какие-то непонятные мне предположения:

То, что они тебе непонятные не говорит ровным счетом ни о чем, кроме того, что тебе они непонятные.

S>Нет, так не работает. В функциональных требованиях никто не упоминает вообще ничего про память. В 99% в требованиях к софту вообще нет ничего про память; в оставшемся проценте это часть нефункциональных требований, и формулируется она в стиле "должно запускаться на машине с 16GB RAM, 1GB места на диске".

Ну вот ты сейчас опять натягиваешь сову на глобус. Функциональные требования могут быть любые. Вообще. Не спрашивая твоего одобрения или твоей оценки их полезности.

S>Ни разу в жизни я не видел (и не надеюсь увидеть) оговорок в требованиях к софту насчёт граничных условий: типа "а вот тут, если кончилось место на диске, то приложение должно выдать вот такое-то сообщение".

Т.е. ты зная как "устроена жизнь" держишь голову в песке? У нас такое сообщение есть и пользователи его регулярно видят. А почему оно тебя так пугает?

S>Такие вещи остаются за рамками требований, кроме очень специальных классов приложений. И ни разу отсутствие таких оговорок не служило поводом разбираться, типа "если вы не заложиди в согласованных с нами требованиях умение падать, когда не хватает памяти, адресного пространства, или места на диске, то вы обязаны не падать".

У нас есть требование работать без перезагрузки. Это просто невозможно выполнить, если память течет. И есть специальный duration test, где проверяется и это требование. Тестеры в жизни не пропустят версию, если увидят рост потребления памяти.

S>Да, код структурирован по другому. Вместо прямого вызова a == 3 происходит вызов делегата, внутри которого лежит ссылка на предикат "a => a==3".

Это другой код. Более того, в зависимости от реализации IEnumerable оно параллельным может стать.

S>Все три приведённые варианта — ленивые. Внезапности никакой не будет.

Все которые ты привел, но это не все которые решарпер поддерживает.

S>Надо просто внимательно смотреть, что именно делает этот рефакторинг.

Ну да, либо имеет целью изменить функциональные требования, либо нет. Больше ничего выдумывать не надо.

S> Все делают всё делают на предположениях. Вы, когда объявляете ссылку not null, делаете предположение, что это соответствует реальным потребностям.

Нет, я выставляю контракт, что вот это поле никогда не будет null, и что все внутри будет валидным и уж точно это никак не связано с моделью.

S>Оно даже может быть справедливо — до определённого момента. А может быть неверным сразу, просто ваше исследование домена оказалось неполным. C'est la vie.

В этом случае его надо переделывать. И это тоже нормально. Вопрос в том насколько это сложно. Если делать не по феншую, то будет боль. Ты считаешь это нормальным, а я нет.

S>И даже монстры типа Microsoft регулярно бывают вынуждены откатывать назад апдейты своих публичных API — это что касается "не страдают".

Ну вряд ли они это считают нормальным.

S>Поэтому я скорее поверю в то, что это вы не понимаете, как устроена жизнь, чем в то, что я тут один такой дебил, а парни из Редмонда, Пало-Альто и Купертино просто забыли мне рассказать про книжки по DDD.

Ну я вот тебе пытался рассказывать, а ты просто не слушаешь. Может и они пытались. С другой стороны чсв тебе явно жмет, если думаешь, что у всех голова болит как бы не забыть тебе все рассказать, чего ты не знаешь.

S>Ну, вы же написали, что у вас все модули независимые, и вы не хотели ограничивать фантазию авторов в плане записи конфигурации. Может вы и место не хотели ограничивать — .

оопшники...
Разумеется их никто не ограничивает в выборе формата, и даже места внутри их песочницы. но кто же им даст писать-то? Это ж сайд-эффект. Во-первых, они должны быть на границе системы, а во-вторых, кто ж доверит модулю, читай хрен с горы, изменять состояние системы?
Модуль определяет, грубо говоря, две функции save :: Data -> Path -> Result<> и load :: Version optional -> Path -> Result<>, делая частичное применение для остальных своих потребностей. Кто как и зачем их вызовет вне контроля модуля. Но, про версию он знать все равно должен, это в сигнатуре библиотечной функции, которая делает фактическую загрузку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.