Re: MVU F# как избежать утечки памяти
От: samius Япония http://sams-tricks.blogspot.com
Дата: 17.10.23 05:57
Оценка: 3 (1)
Здравствуйте, Разраб, Вы писали:

Р>Есть вот такой код.

Р>функция view каждый раз возвращает новый элемент управления, т.к. чистая.
Здесь нет связи, можно представить чистую функцию, которая бы каждый раз возвращала один и тот же элемент. И грязную, которая бы возвращала каждый раз новый.

Р>Получается ФП не работает с Winforms? Нужны элементы ООП, чтобы избежать дикого оверхеда?

Получается, что что бы что-то утверждать, нужно формализовать понятие "ФП" и "работает". Если говорить именно о чистом ФП, то увы, с WinForms его скрестить будет сложно. Однако, F# преподносится гибридным и ФП в его рамках не обязано быть чистым. Компилятор ведь не требует чистоты функций.

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

Собственно, вместо изменения состояния

            form.Controls.Clear()
            form.Controls.Add(newLayout)

вызвать что-то вроде грязной
updateLayout form newModel


Винформс не заведется без грязи. Собственно, стоит ли пытаться делать вид, что программа на ФП с Винформс вся чистая? Но даже если бы оно того и стоило, все равно пришлось бы написать грязный обновлятор Винформс, который бы подгибал элементы управления.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.