Re[2]: проектирование
От: neFormal Россия  
Дата: 24.06.17 19:02
Оценка:
Здравствуйте, Nick Linker, Вы писали:

спасибо за ссылки!

NL>Моки не нужны: http://rea.tech/to-kill-a-mockingtest/


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

NL>Вообще в двух словах не расскажешь, так что если есть что-то более специфическое спросить, то лучше так.


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

спрошу про наболевшее в haskell: как сделать наследование или заменить его?
есть у меня, к примеру, Paratrooper
делаю я пушку, которая умеет рисоваться, стрелять и принимать команды управления. пушка, вертолёты и пульки хранятся в одном списке, чтобы их можно было между собой сортировать и отрисовывать.
в какой-то момент хочется сделать пушку, у которой два ствола, и стреляет она другими пульками. а потом пушку с двумя стволами и ракетницей, и стреляет это всё третьим видом пулек и ракетами.
в ООП это всё делается через переопределение методов отрисовки и обновления состояния. при этом через шаблонный метод у меня всё это доступно весьма прозрачно. и при этом я ещё могу обратиться к родительской реализации и не дублировать код. например, вызвать отрисовку первой пушки, а второй ствол нарисовать рядом в дочернем методе.
в хаскеле мне придётся каждый нужный мне метод реализовывать отдельно. и это приводит к огромному оверхеду.
что с этим можно сделать?
...coding for chaos...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.