paint-brush
Dilema okvirapo@luminousmen
Nova povijest

Dilema okvira

po luminousmen7m2024/09/26
Read on Terminal Reader

Predugo; Čitati

Kao programer, okviri su obično prva stvar koje zgrabite kada želite ubrzati stvari i održati ih pouzdanima.
featured image - Dilema okvira
luminousmen HackerNoon profile picture

Kao programer, okviri su obično prva stvar koje zgrabite kada želite ubrzati stvari i održati ih pouzdanima. Ljudi često govore o okvirima kao da su savršeno rješenje koje može riješiti sve vaše probleme, čineći razvoj bržim, lakšim i učinkovitijim. Međutim, ako ste imali neko iskustvo, znate da okviri nisu jedno rješenje za sve. Odabir pravog može pojednostaviti vaš posao, ali pogrešan izbor može dovesti do glavobolja na putu, usporavajući vas baš kada morate brzo krenuti.


U ovom postu na blogu zaronit ćemo u stvarne izazove i strategije koje dolaze s odabirom i korištenjem okvira. Pogledat ćemo potencijalne zamke, kako ih izbjeći i načine da svoju bazu koda održite fleksibilnom — čak i kada je okvir u igri.

Veza za koju niste znali da se upuštate

Obvezivanje na okvir pomalo je poput ulaska u dugoročnu vezu. I to nije nešto što treba olako shvatiti. Za razliku od jednostavne knjižnice ili malog uslužnog programa, okviri dolaze s mišljenjima - puno njih. Oni nameću strukturu i metodologiju vašoj aplikaciji, sviđalo se to vama ili ne.


Dugoročna predanost okvira


Ključno je zapamtiti da kreatori okvira imaju svoje prioritete. Oni rješavaju SVOJE probleme, ne tvoje. Ne duguju vam ništa (osim, naravno, ako nemate prijatelja u internom timu okvira, u tom slučaju, sretnik vaš). Ako stvari krenu naopako, osobito duboko u vašem projektu, mogli biste biti povrijeđeni. Sada ste zapeli u popravljanju, ili još gore, u potpunosti ga iščupate.


Nije zabavno, zar ne?


Dakle, prije nego što se vežete za okvir, provjerite odgovara li doista onome što vam je potrebno. U suprotnom, bacate kockice.

FAANG problemi

Autor nema pojma je li FAANG postao MAANG, MANGA ili smo sada svi samo u animeu.

Ovdje se iskustvo stvarno računa. Kada tvrtke brzo rastu, često se suočavaju s izazovima s kojima se ne može nositi nijedno standardno rješenje. Opseg tih problema tjera ih da stvaraju vlastite alate — prilagođene baze podataka, ETL mehanizme, BI alate — što god hoćete. Veliki tehnološki divovi poput Googlea, LinkedIna, Spotifyja i Netflixa prednjače, stvarajući i otvarajući alate s kojima se mi ostali sada možemo igrati.


Ali evo u čemu je stvar: ti alati nisu napravljeni da budu univerzalno primjenjivi. Stvoreni su za rješavanje specifičnih problema s kojima se većina tvrtki nikada neće susresti. Inženjeri koji su radili u tim velikim tvrtkama navikli su se nositi s ovakvim izazovima — izgradili su rješenja koja rade na razini koju većina nas može samo zamisliti. Dakle, kada pređu u manje tvrtke, odluke o okviru i alatima koje donose temelje se na dubokom razumijevanju i snage i zamki ovih tehnologija.

Odbijanje okvira

U posljednje vrijeme kuha se neka pobuna — ljudi postaju umorni od okvira. Osobito u svijetu JavaScripta, programerima je dosta stalnog odljeva. Vjerojatno ste to vidjeli: svaki put kada padne veliko ažuriranje, morate ponovno napisati značajne dijelove svoje baze koda samo da biste ostali relevantni. I nemojte me navoditi na beskrajni ciklus prijelomnih promjena.


Ova frustracija dovela je do oživljavanja jednostavnijih, stabilnijih nizova. Stvari kao što su HTML, CSS, jQuery, PHP i SQLite vraćaju se među razvojne programere koji daju prednost obavljanju stvari umjesto ostanku na vrhuncu tehnologije. Da, moglo bi se činiti pomalo "starom školom", ali daleko je od zastarjelog. S jednostavnijim snopom možete brzo ponavljati i slati još brže. Naravno, noviji okviri kao što su React, Node.js i Flask imaju svoje mjesto, ali ponekad vam nisu potrebne sve otmjene stvari. Ponekad vas držanje onoga što djeluje može uštedjeti puno glavobolja.

Okvirni industrijski kompleks?

Postaju li okviri... prenaglašeni? Teško je ne primijetiti da se neki okviri više doimaju kao alati dizajnirani za privlačenje VC financiranja nego za rješavanje stvarnih problema programera. Kao da postoji cijeli ekosustav koji programere gura u te okvire, samo da bi oni kasnije shvatili da su, kad se prošire, zaključani u skupe platforme. Naravno, okviri kao što je Databricks su otvorenog koda i besplatni su za početak, ali kako rastete, guraju vas se prema njihovim poslovnim rješenjima. I odjednom, vaši hosting i operativni troškovi su skočili, dok bi jednostavan VPS mogao biti dovoljan.


Osjeća se pomalo kao zamka, zar ne?

Odgađanje Okvirne odluke

Evo savjeta u koji se kunem: nemojte žuriti s odabirom okvira . Nemojte se obvezivati dok vaša arhitektura nije u potpunosti razrađena.


Okvir bi trebao biti posljednja stvar o kojoj brinete, a ne prva.


Prvo provjerite je li vaša arhitektura čvrsta. Upoznajte svoje ključne komponente i način na koji će one međusobno djelovati. Nakon što ste to shvatili, možete procijeniti okvire s jasnim razumijevanjem gdje bi se mogli uklopiti - ili odgovaraju li uopće.


Ovaj pristup osigurava da je vaš dizajn čvrst i prilagođen vašim specifičnim potrebama. Kada dođe vrijeme za razmatranje okvira, moći ćete jasno vidjeti gdje može poboljšati vašu arhitekturu bez da je ograničava.


Prije nego uskočite u korištenje bilo kojeg okvira, zapitajte se: treba li vam stvarno, uistinu? Naravno, okviri mogu dodati slojeve automatizacije i pogodnosti, ali također dolaze sa svojim skupom ograničenja. Ako vaša aplikacija ima jedinstvene zahtjeve, okviri se možda neće dobro ponašati s njima.


Razmislite dugo o dugoročnim prednostima u odnosu na ograničenja.

Izrada okvira potrošnim

Ako odlučite da je okvir vrijedan rizika, provjerite je li lako zamijeniti. Da, dobro ste čuli. Ugradite malo fleksibilnosti tako da, ako ga kasnije budete morali odbaciti, to ne bude monumentalan zadatak. Evo kako:

Apstrahirajte svoje ovisnosti

Držite prljave ruke okvira podalje od svog osnovnog koda. Koristite sučelja za apstrahiranje funkcionalnosti okvira tako da vaša poslovna logika ne ovisi izravno o okviru.


Recimo da koristite TensorFlow za strojno učenje. Umjesto ugrađivanja koda TensorFlow kroz cijelu aplikaciju, definirajte sučelja kako bi stvari bile uredne i apstraktne:

 from abc import ABC, abstractmethod import tensorflow as tf class ModelTrainer(ABC): @abstractmethod def train(self, data): pass class TensorFlowTrainer(ModelTrainer): def train(self, data): # TensorFlow-specific training logic model = tf.keras.models.Sequential([...]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy') model.fit(data, epochs=5) return model


Čineći to, vaša temeljna logika nije usko povezana s TensorFlowom. Ako se trebate prebaciti na drugi okvir strojnog učenja, samo je stvar u zamjeni implementacije.

Injekcija ovisnosti (DI) je vaš prijatelj

Zatim, razgovarajmo o ubrizgavanju ovisnosti (DI). Ova tehnika vam omogućuje ubacivanje specifičnih implementacija vaših sučelja u vaše klase, održavajući vašu bazu koda razdvojenom i modularnom.

 class TrainingPipeline: def __init__(self, trainer: ModelTrainer): self.trainer = trainer def execute(self, data): return self.trainer.train(data) # Inject the TensorFlowTrainer implementation pipeline = TrainingPipeline(TensorFlowTrainer())


Sada je vaš kod fleksibilan, jednostavan za testiranje i spreman za sve što ga budućnost čeka.

Prihvatite inverziju kontrole (IoC)

Za vrhunsku fleksibilnost, podignite stvari na viši nivo s Inverzijom kontrole (IoC). Ovaj obrazac vam omogućuje da specificirate implementacije u konfiguracijskoj datoteci ili centraliziranoj lokaciji u vašem kodu. To je trešnja na vrhu vaše okvirno-agnostičke arhitekture.


Evo primjera kako bi to moglo funkcionirati s pristupom koji se temelji na konfiguraciji:

 # config.py class Config: TRAINER = 'my_project.trainers.TensorFlowTrainer' # main.py import importlib class TrainingPipeline: def __init__(self, trainer_class: str): module_name, class_name = trainer_class.rsplit('.', 1) module = importlib.import_module(module_name) trainer_cls = getattr(module, class_name) self.trainer = trainer_cls() def execute(self, data): return self.trainer.train(data) # Inject the trainer specified in the configuration from config import Config pipeline = TrainingPipeline(Config.TRAINER)


Sada, ako ikada trebate zamijeniti TensorFlow drugim okvirom za strojno učenje, jednostavno ažurirajte konfiguraciju i nastavite. Bez gnjavaže, bez drame.

Zaključak

Zapamtite, okviri bi trebali služiti VAŠOJ arhitekturi, a ne diktirati je. Uz pažljivo planiranje i stratešku apstrakciju, možete iskoristiti prednosti okvira bez da ostanete zarobljeni u dugoročnim ovisnostima. Trik je u održavanju kontrole. Dakle, sljedeći put kada se spremate zaroniti u okvir, napravite korak unatrag i podsjetite se: vi odlučujete ovdje.


Spreman biti povrijeđen


Hvala vam na čitanju!


Ima li pitanja? Ostavite svoj komentar ispod kako biste započeli fantastične rasprave!


Pogledajte moj blog ili se dođite pozdraviti 👋 na Twitteru ili se pretplatite na moj telegram kanal . Planirajte najbolje što možete!