Що вважається кодом третьої сторони?


15

Натхненний цим питанням Використання сторонніх бібліотек - завжди використовувати обгортку? Мені хотілося знати, що насправді люди вважають сторонніми бібліотеками.

Приклад із PHP:
Якщо я будую додаток за допомогою Zend Framework, чи слід розглядати бібліотеки Zend Framework як код третьої сторони?

Приклад із C #:
Якщо я будую додаток для настільних комп’ютерів, чи слід розглядати всі класи .Net як код сторонніх?

Приклад з Java:
Чи слід ставитися до всіх бібліотек в JDK як до сторонніх бібліотек?

Деякі люди кажуть, що якщо бібліотека стабільна і не змінюватиметься часто, її не потрібно обробляти. Однак я не бачу, як можна було б протестувати клас, який залежить від стороннього коду, не перетворюючи його.


8
Чи можете, будь ласка, пояснити пояснення, чому?
Songo

Я чув про програмне забезпечення сторонніх виробників, але не про код сторонніх розробників. Більшість третіх осіб не надають вам свій вихідний код.
Тулен Кордова

Відповіді:


18

Ваші приклади - це сторонні коди, але ви не повинні писати обгортки для них. Це великі, зрілі проекти зі стабільними та добре спланованими API.

Потреба в обгортках полягає в тому, щоб забезпечити шар абстракції між вашим кодом і бібліотекою. Ця абстракція потрібна лише тоді, коли ви виявите, що бібліотека не надає хороших API для конкретної речі, яку ви робите. Тоді ви можете створити обгортку для спрощення власного коду та приховати той факт, що виклики API незручні.

Ваш код можна перевірити, якщо ви використовуєте ін'єкцію залежності. У ваших тестових одиницях ви можете замінити залежність бібліотеки об'єктом макету, що дозволяє ізолювати код, що перевіряється.


+1 для пояснення, коли обертка чи фасад, якщо ви хочете, можуть знадобитися.
Джошуа Дрейк

Дякую за відповідь, але стосовно останнього пункту про тестування одиниць ви можете поглянути на це запитання, де я намагаюсь перевірити тестування класу, який має пряму залежність від бібліотечної бази?
Сонго

@Songo: Ваша стратегія тесту повинна створити Zend_Mailмакет, який ви передасте вашому Loggerоб'єкту, який перевіряється. Чи не підтримує PHP введення качок? Якщо так, то чи не банально створити макетний об’єкт ...? Я не знаю PHP, але ви можете подивитися приклади насмішкувальних бібліотек PHP, щоб побачити, як це робиться. На мовах, які не підтримують введення качок, я думаю, вам потрібно буде перейти Zend_Mailна інтерфейс, а потім створити тонку обгортку, яка реалізує інтерфейс і успадковує від Zend_Mailабо просто делегує всі його виклики.
М. Дадлі

@emddudley так, але я шукав більш загальне рішення проблеми іншими мовами, які не підтримують набору качок. Насправді, ваше Zend_Mailперше рішення про завершення було моєю першою думкою, але як ви бачите в моєму початковому дописі перед редагуванням, я все-таки використовував інтерфейс і обгортку, яка реалізує його. Однак єдиною метою обгортки є те, щоб я міг знущатися над його інтерфейсом. Це поширене в мовах, які не підтримують введення качок? Я маю на увазі будівництво нескінченного фантика?
Songo

@Songo: Я думаю, що це дуже залежить від мови та бібліотеки, і ви повинні робити те, що підтримує ваша платформа. Іноді ви можете застрягти в написанні обгортки. Введення залежності та знущання над об'єктами є доволі недавніми подіями (2004?), Тому не всі мови та бібліотеки підтримують їх дуже добре. "Загальне рішення", яке ви шукаєте, - це лише міркування: як ви можете створити свій код для нещільного з'єднання та ефективного тестування одиниць?
М. Дадлі

6

Мета завершення роботи бібліотеки полягає в тому, щоб розірвати залежність власного коду від цієї бібліотеки, щоб увімкнути:

  • Тестування блоку - Ви повинні мати можливість протестувати свій код. Якщо бібліотека не дозволяє вам знущатися над класами або змушувати відповіді, які вам потрібні для тестування, вам потрібно буде перегорнути цю бібліотеку. Це очевидна проблема, і, мабуть, справа не у тому, що вам цікаво.
  • Зміна реалізацій. Як автор коду, ви повинні зрозуміти зміни, які, ймовірно, натраплять на ваш шлях, і скільки ці зміни коштуватимуть для підготовки порівняно з тим, наскільки вони ймовірні. Чи можете ви перейти з .NET на JVM? Це важко і малоймовірно; однак, ви, швидше за все, змінити технології інтерфейсу в майбутньому або двигуни XML.

Виділення сторонніх бібліотек та рамок - лише підмножина відокремлених змін.


Дуже хороший пункт про тестування одиниць. Я не кажу, що завжди обгортайте, щоб мати можливість перевірити ваш додаток, але це хороша стратегія для розв’язки залежностей, коли це необхідно.
Серхіо Акоста

2

Я б не ставився до членів стандартної бібліотеки як до стороннього коду - вони все-таки є стандартними і можуть вважати їх доступними та функціональними на платформі, яку ви використовуєте.

Що стосується чогось на зразок Zend, я думаю, що хтось цього б не завершив - вам, мабуть, потрібно було б переписати програму, якби ви взяли на себе інші рамки. Якщо чесно, я б не переконався, що це не була серйозна залежність від зовнішньої конфігурації або якби я не планував робити цю частину заміною.


2

Я вважав би бібліотеки, надані певною мовою програмування, лише частиною мови.

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

Беручи ваш приклад, я вважав би Зенда третьою стороною. Я також побудував би свою програму таким чином, щоб моя основна бізнес-логіка не залежала від Zend.

Вікіпедія визначає сторонній компонент як:

У комп'ютерному програмуванні сторонній програмний компонент - це програмний компонент для багаторазового використання, розроблений для вільного розповсюдження або продажу суб'єктом господарювання, окрім оригінального постачальника платформи розвитку.


1

У найсуворішому сенсі кожен приклад, який ви наводили, - це код сторонньої сторони. Однак не всі сторонні коди повинні бути завернені. Усі бібліотеки сторонніх розробників повинні бути завернуті. Рамки, за визначенням, неможливо завершити, оскільки вони стають частиною вашого коду. Ось чому ви обгорнете свою бібліотеку журналів, але не рамку .NET або Zend. Дійсно не можна відокремити код від .NET - вони переплітаються. Звичайно, хороші рамки матимуть інтерфейси для програмування, що дозволяє вам певною мірою обійти проблему.

Дивіться також: /programming/148747/what-is-the-difference-between-a-framework-and-a-library

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.