У цьому контексті слово "заглушка" вживається замість "глузування", але задля ясності та точності автор мав би вживати "глузування", бо "макет" є свого роду заглушкою, але для тестування. Щоб уникнути подальшої плутанини, нам потрібно визначити, що таке заглушка.
У загальному контексті заглушка - це частина програми (як правило, це функція або об'єкт), яка інкапсулює складність виклику іншої програми (як правило, розміщеної на іншій машині, VM чи процесі), але не завжди це також може бути локальною об’єкт). Оскільки фактична програма для виклику зазвичай не розташована в одному просторі пам’яті, для виклику її потрібно багато операцій, таких як адресація, виконання фактичного віддаленого виклику, маршанг / серіалізація даних / аргументів, що передаються (і те саме з потенційним результатом), можливо навіть мати справу з автентифікацією / безпекою тощо. Зауважте, що в деяких контекстах заглушки також називають проксі-серверами (наприклад, динамічними проксі-серверами на Java).
Макет - це дуже специфічний і обмежувальний вид заглушки, тому що макет є заміною іншої функції або об’єкта для тестування. На практиці ми часто використовуємо макети як локальні програми (функції або об'єкти) для заміни віддаленої програми в тестовому середовищі. У будь-якому випадку макет може імітувати фактичну поведінку заміненої програми в обмеженому контексті.
Більшість відомих видів заглушок, очевидно, для розподіленого програмування, коли потрібно викликати віддалені процедури ( RPC ) або віддалені об'єкти ( RMI , CORBA ). Більшість розподілених фреймворків / бібліотек програмування автоматизують генерацію заглушок, щоб не потрібно писати їх вручну. Заглушки можна генерувати з визначення інтерфейсу, записаного, наприклад, з IDL (але ви також можете використовувати будь-яку мову для визначення інтерфейсів).
Як правило, в RPC, RMI, CORBA і так далі виокремлюють заглушки на стороні клієнта , які в основному піклуються про маршалінг / серіалізацію аргументів та виконання віддаленого виклику, і заглушки на стороні сервера , які в основному дбають про зняття / десериалізацію аргументи і фактично виконують віддалену функцію / метод. Очевидно, клієнтські заглушки розташовані на стороні клієнта, тоді як штрихові клітинки (часто їх називають скелетами) розташовані на стороні сервера.
Написання хороших ефективних та загальних заглушок стає досить складною справою з посиланнями на об'єкти. Більшість розподілених об'єктних каркасів, таких як RMI та CORBA, мають справу з розподіленими посиланнями на об'єкти, але саме цього більшість програмістів уникає, наприклад, у середовищах REST. Як правило, в середовищах REST програмісти JavaScript виконують прості функції заглушки, щоб інкапсулювати виклики AJAX (серіалізація об'єктів підтримується JSON.parse
і JSON.stringify
). Проект Swagger Codegen надає широку підтримку автоматичного генерування заглушок REST на різних мовах.