Я вважав принципи SOLID досить корисними, коли думав про об'єктно-орієнтований дизайн.
Чи існує подібний / еквівалентний набір мовно-агностичних принципів, розроблених для функціонального програмування?
Я вважав принципи SOLID досить корисними, коли думав про об'єктно-орієнтований дизайн.
Чи існує подібний / еквівалентний набір мовно-агностичних принципів, розроблених для функціонального програмування?
Відповіді:
Трохи важко знайти еквіваленти, але я можу спробувати:
SOLID виявляється гарною ідеєю і для функціональних / імперативних областей.
SRP - " Вчини лише одне" було взято з імперативного програмування в першу чергу. Добре мати невеликі цілеспрямовані функції.
OCP - Добре дозволяти вам змінювати поведінку без зміни коду. Функціональне програмування використовує функції вищого порядку більше, ніж успадкування, але принцип дотримується.
LSP - Дотримання деякого контракту на інтерфейс так само добре в функціональному програмуванні, як і в об'єктно-орієнтованому. Якщо функція сортування приймає компаратор, то можна було б очікувати, що "0 дорівнює, менше, ніж забезпечує негативні результати, більше, ніж поведінка позитивних результатів".
ISP - Більшість функціональних мов все ще має структури. Визначення найменшого набору даних, необхідних функції, все ще є хорошою практикою. Потрібна найменш специфічний інтерфейс для даних (навіщо використовувати Списки ints, коли так само добре працюють Перерахунки T)?
DIP - Задавання параметрів функції (або функція вищого порядку для їх отримання) замість жорсткого кодування функції для отримання певного значення настільки ж добре в функціональному програмуванні, як і в об'єктно-орієнтованому.
І навіть при виконанні об'єктно-орієнтованого програмування багато з цих принципів застосовуються і до проектування методів в об'єктах.