Франкенштајн у програмирању — шта је, узроци и превенција

Аутор: IT Sectr Објављено: 2026-07-26 Време читања: 10 мин

Франкенштајн у програмирању је код састављен од некомпатибилних делова различитих технологија, стилова и архитектура. Према истраживању ThoughtWorks Technology Radar (2024), 28% великих пројеката садржи знакове синдрома Франкенштајна — архитектурног еклектицизма који настаје у одсуству јединствене техничке визије. По аналогији са романом Мери Шели, такав код ради, али његово одржавање постаје кошмар.

Главно

  • Франкенштајн — антиобразац у којем се систем саставља од различитих, слабо компатибилних компонената
  • Основни узроци: недостатак архитекте, спајање пројеката, "креативност без граница"
  • Проблем — свака компонента захтева познавање своје технологије, а интеракције су непредвидиве
  • Рефакторисање Франкенштајна захтева уједињавање технолошког стека и издвајање јасних граница
  • Architecture Decision Records и RFC — најбољи алати за превенцију

Шта је Франкенштајн у програмирању

Франкенштајн (Frankenstein code, Frankenstein pattern) — антиобразац где се програмски систем саставља од делова који нису намењени за заједнички рад. Као чудовиште Франкенштајна, такав код може да функционише, али је ружан, непредвидив и опасан при најмањим променама.

Термин потиче из књижевности: у роману Мери Шели "Франкенштајн, или савремени Прометеј" (1818) научник је створио живо биће од делова тела различитих преминулих особа.

Разлика између Франкенштајна и шпагети кода је у обиму и природи проблема.

Франкенштајн наспрам микросервиса

Микросервисна архитектура дозвољава употребу различитих технологија за различите сервисе, али под условом јасних граница и стандардизованих протокола.

Зашто настаје синдром Франкенштајна

Недостатак техничког лидера или архитекте — први узрок.

Спајање пројеката — други чест узрок.

Корпоративна преузимања — трећи сценарио.

УзрокОписРезултат
Нема архитектеСваки програмер бира свој стек3 различита HTTP клијента
Спајање пројекатаДва производа се лепе у једанДва ORM-а, два начина логовања
M&AПреузимање предузећаХибрид архитектура и стилова
ЕкспериментиНове технологије без стратегијеJava 8 + Java 21 у једном фајлу
Политичке одлукеНаметање технологије одозгоEnterprise фрејмворк за скрипт

Фактор "креативности"

Искусни програмери који желе да испробају нове технологије у производњи често постају извор Франкенштајна.

Примери Франкенштајна у реалним пројектима

Класичан пример — коришћење више ORM-ова у једној апликацији.

Други пример — мешање архитектурних стилова.

Трећи пример — технолошки стек са Python, Node.js, C# и Java.

javascript
// франкенштајн — мешани стилови и технологије
// callbacks, Promises и async/await комбиновани

// callbacks
db.query("SELECT * FROM users", function(err, rows) {
  if (err) handleError(err);
  // Promise унутар callback
  fetch("/api/data").then(function(data) {
    // async/await унутар then
    (async () => {
      const result = await processData(data);
      sendResponse(result);
    })();
  });
});

// чист код — уједначен async/await стил
async function getUserData(userId) {
  const user = await db.query("SELECT * FROM users WHERE id = ?", [userId]);
  const data = await fetch("/api/data/" + userId);
  return await processData(user, data);
}

Франкенштајн на нивоу података

Једна база података користи се истовремено и као SQL и као NoSQL.

Последице кода Франкенштајна

Тешкоћа онбординга — прва последица.

Непредвидивост понашања — друга последица.

Безбедност — трећа последица.

Технички дуг Франкенштајна

SonarQube може измерити технички дуг, али не и "архитектурни дуг".

Како избећи стварање чудовишта

Први корак — поставити архитекту или tech lead-а.

Други — увести процес Architecture Decision Record (ADR).

Трећи — принцип "један задатак — један алат".

  • Архитекта са правом вета на нове технологије
  • Architecture Decision Records за сваки избор
  • Јединствен стек за сваки задатак
  • RFC за велике промене
  • Технолошки радар за праћење

Политика експерименталних технологија

Експерименти су дозвољени, али у изолованом окружењу.

Како рефакторисати постојећег Франкенштајна

Инвентаризација — први корак.

Стандардизација — други корак.

Стратегија Parallel Run — трећи корак.

java
// франкенштајн — три HTTP приступа у једном пројекту
// Модул A: OkHttp
OkHttpClient client = new OkHttpClient().newCall(request);

// Модул B: RestTemplate (Spring)
restTemplate.getForObject(url, String.class);

// Модул C: java.net.HttpURLConnection
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();

// ујединачен приступ: RestTemplate за синхроно, WebClient за реактивно
@Autowired
private RestTemplate restTemplate;

public String callApi(String url) {
    return restTemplate.getForObject(url, String.class);
}

Улога техничког лидера у превенцији

Технички лидер — главни алат за борбу против Франкенштајна.

Принцип доследности

Најважнији квалитет архитектуре је доследност (consistency).

Често постављана питања

По чему се Франкенштајн разликује од polyglot persistence-а?

Polyglot persistence — свесно коришћење различитих база података за различите задатке.

Може ли микросервисна архитектура да се претвори у Франкенштајна?

Да, и то је чест проблем.

Како убедити тим да не користи нову технологију?

Не забрањујте — усмеравајте.

Како се борити против Франкенштајна у наслеђеном пројекту?

Прво инвентаризација, па стандардизација.

Колико технологија је оптимално за један пројекат?

Што мање, то боље.

Резиме

  • Франкенштајн — антиобразац где је систем од различитих некомпатибилних компонената
  • Основни узроци: недостатак архитекте, спајање, експерименти
  • Последице — тежак онбординг, непредвидивост, безбедност
  • ADR и RFC — кључни процеси за превенцију
  • Принцип "један алат по задатку"
  • Рефакторисање почиње инвентаризацијом
  • Доследност архитектуре важнија од "најбољег алата"

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође