Más contenido relacionado Similar a Design of big applications in FP (13) Más de Alexander Granin (20) Design of big applications in FP6. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Мейнстрим
ФП
6
7. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Мейнстрим
ФП
7
8. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✗✓?
Мейнстрим
ФП
8
9. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Мейнстрим
ФП
9
10. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки
Мейнстрим
ФП
10
11. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Мейнстрим
ФП
11
12. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход
Мейнстрим
ФП
12
13. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
Мейнстрим
ФП
13
14. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Мейнстрим
ФП
14
15. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Мейнстрим
ФП
15
16. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.)
Мейнстрим
ФП
16
17. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Мейнстрим
ФП
17
18. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции
Мейнстрим
ФП
18
19. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции ✗? ✓✓✓✗?
Мейнстрим
ФП
19
20. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции ✗? ✓✓✓✗?
Проектирование ПО ✓?✓✗ UML ✓✗
Мейнстрим
ФП
20
21. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции ✗? ✓✓✓✗?
Проектирование ПО ✓?✓✗ UML ✓✗
Мейнстрим
ФП
21
22. GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции ✗? ✓✓✓✗?
Проектирование ПО ✓?✓✗ UML ✓✗
Мейнстрим
ФП
22
38. viewFlow :: GameNode -> ViewWire () ()
viewFlow node = modes Render (selector node) . (
pure () &&&
interpret node
. printEventVal
. filterE isActualEvent
. now . event
)
Пример FRP-кода (Haskell Netwire)
38
39. produce f = do
prodObj <- createProduct (f ^. energyCost) (f ^. scheme)
placeProduct prodObj (f ^. placementAlg)
return "Successfully produced."
producingScenario :: Eval String
producingScenario = do
f <- read fabric
if f ^. producing then produce f else return "Producing paused."
Пример eDSL игровых сценариев
39
40. Ссылки
40
● Дизайн и архитектура ПО в ФП
http://habrahabr.ru/post/211871/
● Large-scale design in Haskell? (SO)
http://stackoverflow.com/questions/3077866/lar
ge-scale-design-in-haskell
42. commandInterpreter :: GameNode -> Event -> Command
commandInterpreter _ ViewAcc.EventClose = V.Finish
commandInterpreter _ _ = V.Render
Пример интерпретатора событий
42
43. data Command = Finish
| Render
| StartViewPointMoving ScreenPoint
| ViewPointMoving ScreenPoint
| StopViewPointMoving ScreenPoint
modifyView (StartViewPointMoving scrPt) view = ...
modifyView (ViewPointMoving scrPt) view = ...
modifyView (StopViewPointMoving scrPt) view = ...
Пример eDSL модели представления
43