Advertisement

More Related Content

More from Alexander Granin(20)

Advertisement

Design of big applications in FP

  1. Дизайн крупных приложений на функциональных языках Александр Гранин graninas@gmail.com 1
  2. Технические аспекты разработки крупного ПО Зеленый ✓ ✗ ?: в мейнстриме Красный ✓ ✗ ?: в ФП-мире 2
  3. GRASP ✓✓✗ SOLID ✓✓✗ Мейнстрим ФП 3
  4. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования Мейнстрим ФП 4
  5. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Мейнстрим ФП 5
  6. 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
  23. Проектирование ПО на UML 23
  24. Анализ требований: Use Cases User Scenarios (текст) Sequence Diagrams 24
  25. Object Diagrams Сommunication Diagrams 25
  26. Class Diagrams 26
  27. Class Diagrams Все, приплыли. 27
  28. Проектирование большого ФП- проекта 28
  29. Анализ требований: MindMaps 29
  30. Карта необходимости 30
  31. Карта элементов (перфекционизм, молчать!) 31
  32. Карта подсистем 32
  33. 33
  34. 34
  35. 35
  36. Побочные эффекты, FRP, интерпретаторы и eDSL 36
  37. 37
  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
  41. Всем спасибо! Александр Гранин graninas@gmail.com 41
  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
Advertisement