Правильна передача параметрів в функцію - stack overflow російською

Наведу приклад. Є функція foo. в яку необхідно передати два властивості двох різних об'єктів. Тут виникає питання, як правильніше передати ці властивості - безпосередньо, або передати об'єкти, а потім в тілі функції витягти з них властивості?

Зрозуміло, що з точки зору практичності краще перший варіант. Але який варіант врахує правильні підходи ООП-програмування та принципи SOLID? Чи не буде перший варіант їм суперечити?

заданий 3 Листопада '15 о 13:21

Додам конкретики: функція додає запис у таблицю. Ця запис буде відображати "дружбу" двох користувачів, тобто обидва параметра- це id двох записів з таблиці users. Так ось - як краще: в якості параметрів цієї функції передати відразу id або об'єкти user? Відразу поставив запитання більш загальним, так як думаю, що питання актуальне для багатьох ситуацій. - raskopin 3 Листопада '15 о 13:40

Рекомендації від прихильників чистого коду цілком зрозумілі - правильніше передавати мінімальні залежності, тобто дані, а не об'єкти, в яких ці дані містяться. Чим менше функція вимагає знань про зовнішній світ, тим легше її тестувати і супроводжувати. Така теорія.

На практиці ж часто є сумніви виду "а раптом мені знадобиться щось ще і доведеться міняти сигнатуру" або "варто прокинути текстовий ip або IpAddress, що є ValueObject для ip".

Так що краще починати з мінімального контракту, але враховувати поточні та майбутні вимоги функції, тобто наскільки складно буде міняти сигнатуру для додавання полів або заміни на об'єкт і особливості даних самого об'єкта.

відповідь дан 3 Листопада '15 о 18:52

Головний принцип - це принцип доцільності. Навіщо передавати цілі об'єкти, коли потрібні тільки їх окремі властивості? Тим більше, семантика: припустимо, Ваша функція (а точніше метод) складає два числа і Ви назвете її summarize. Всім навколо ясно, що вона підсумовує, по не всім зрозуміло, чому об'єкти.

Інша справа, якщо планується в майбутньому використовувати і інші властивості цих об'єктів. Тоді підхід з об'єктами вірний.

відповідь дан 3 Листопада '15 о 13:28

Правильна передача параметрів в функцію - stack overflow російською

Мінусанул, тому що відповідь не розглядає всі можливі варіанти, а лише окремий випадок. Причому цей окремий випадок на практиці зустрічається не так уже й часто. - Razzwan 3 Листопада '15 о 13:31

Я б теж хотів побачити відповідь, який охопить всі можливі варіанти. Якщо Ви його вже пишете, бажаю Вам запастися кави і міцної клавіатурою. - Mik 3 Листопада '15 о 13:40

Схожі статті