The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2020-11-13
Programmatūras izstrāde

Kā uzrakstīt labu un kvalitatīvu kodu?

Justyna Mianowska

Uzrakstīt skaistu, labi izstrādātu un labi izskatīgu kodu nav tik grūti, kā šķiet. Tas prasa nelielu piepūli, lai iepazītos ar galvenajiem noteikumiem un vienkārši izmantotu tos savā kodā. Un tas nav jādara kā viss uzreiz, bet, kad jūtaties ērti ar vienu lietu, mēģiniet padomāt par citu, un tā tālāk.

Veidojiet stabilu, nevis muļķīgu kodu

Sāksim ar elementārākajiem noteikumiem, kurus sauc par SOLID. Tas ir termins, kas apraksta dizaina principu kopumu, lai nodrošinātu labu dizainu. kods ko izgudroja Roberts K. Martins, un kā tas notiek:

S - vienotas atbildības princips

Tajā noteikts, ka klasei jābūt vienam un tikai vienam iemeslam, lai to mainītu. Citiem vārdiem sakot, klasei vajadzētu būt tikai vienam uzdevumam, tāpēc mums vajadzētu izvairīties no lielu klašu ar daudziem pienākumiem rakstīšanas. Ja mūsu klasei ir jāveic daudz lietu, tad katra no tām būtu jādeleģē atsevišķās klasēs.

klase Paziņojums
  def initialize(params)
    @params = params
  end

  def call
    EmailSender.new(message).call
  end

  privāts

  def ziņojums
    # dažas implementācijas
  beigas
beigas

O nozīmē atvērts/aizvērts princips

Tajā ir noteikts, ka ir jābūt iespējai paplašināt klases uzvedību, nemainot to. Citiem vārdiem sakot, ir jābūt iespējai viegli paplašināt klasi, neveicot tajā nekādas modifikācijas. To var panākt, piemēram, izmantojot stratēģijas modeli vai dekoratorus.

klase Paziņojums
  def initialize(params, sender)
    @params = params
    @sender = sender
  end

  def call
    sender.call message
  end

  privāts

  def message
    # dažas implementācijas
  beigas
beigas

klase EmailSender
  def call(message)
    # dažas implementācijas
  end
end

klase SmsSender
  def call(message)
    # dažas implementācijas
  end
end

Izmantojot šo konstrukciju, ir iespējams pievienot jaunus sūtītājus, nemainot kodu.

L ir Liškova aizvietošanas princips

Tajā noteikts, ka atvasinātajām klasēm jābūt aizvietojamām ar savām bāzes klasēm. Citiem vārdiem sakot, to klašu lietojumam, kas nāk no viena priekšteča, jābūt viegli aizvietojamam ar citu pēcteci.

klase Logger {
  info (ziņojums) {
    console.info(this._prefixFor('info') + ziņojums)
  }

  error (message, err) {
    console.error(this._prefixFor('error') + ziņojums)
    if (err) {
      console.error(err)
    }
  }

  _prefixFor (type) {
    // kāda implementācija
  }
}

klase ScepticLogger extends Logger {
  info (ziņojums) {
    super.info(message)
    console.info(this._prefixFor('info') + 'Un tas ir viss, ko man vajadzēja pateikt.')
  }

  error (message, err) {
    super.error(message, err)
    console.error(this._prefixFor('error') + 'Liela problēma!')
  }
}

Mēs varam viegli nomainīt klases nosaukumu, jo abām klasēm ir tieši tāds pats lietošanas interfeiss.

Es domāju Interfeisa segregācijas princips

Tajā teikts, ka ir jāizveido smalkgraudainas saskarnes, kas ir specifiskas klientam. Kas ir saskarne? Tas ir paredzēts veids, kā izmantot kādu koda daļu. Tātad šī noteikuma pārkāpums varētu būt, piemēram, klase ar pārāk daudz metodēm, kā arī metode ar pārāk daudz argumentu iespējām. Labs piemērs šī principa vizualizēšanai ir repozitorija modelis, ne tikai tāpēc, ka mēs bieži vien vienā klasē ievietojam daudz metožu, bet arī tāpēc, ka šīs metodes ir pakļautas riskam pieņemt pārāk daudz argumentu.

# nav labākais piemērs šoreiz
klase NotificationRepository
  def find_all_by_ids(ids:, info:)
    notifications = Notification.where(id: ids)
    info ? notifications.where(type: :info) : notifications
  end
end

# un labāks
klase NotificationRepository
  def find_all_by_ids(ids:)
    Notification.where(id: ids)
  end

  def find_all_by_ids_info(ids:)
    find_all_by_ids(ids).where(type: :info)
  end
end

D ir atkarības inversijas princips

Tajā teikts, ka jums ir jāpaļaujas uz abstrakcijām, nevis uz konkrētībām. Citiem vārdiem sakot, klasei, kas izmanto citu klasi, nevajadzētu būt atkarīgai no tās implementācijas detaļām, svarīga ir tikai lietotāja saskarne.

klase Paziņojums
  def initialize(params, sender)
    @params = params
    @sender = sender
  end

  def call
    sender.call message
  end

  privāts

  def message
    # dažas implementācijas
  beigas
beigas

Viss, kas mums jāzina par sender objektu, ir tas, ka tas piedāvā `call` metodi, kas kā argumentu sagaida ziņojumu.

Nav labākais kods jebkad

Ir arī ļoti svarīgi zināt lietas, kas būtu stingri jāizvairās, rakstot kodu, tāpēc šeit iet vēl vienu kolekciju ar STUPID principiem, kas padara kodu nav uzturējams, grūti testēt, un atkārtoti izmantot.

S nozīmē Singleton

Atsevišķi vienskaitļi bieži tiek uzskatīti par pretveidiem, un parasti no tiem ir jāizvairās. Taču galvenā problēma ar šo modeli ir tā, ka tas ir sava veida attaisnojums globālajiem mainīgajiem/metodēm, un izstrādātāji to var ātri pārspīlēt.

T nozīmē cieša savienošana

Tas tiek saglabāts, ja izmaiņas vienā modulī prasa izmaiņas arī citās lietojumprogrammas daļās.

U ir nepārbaudāmība

Ja jūsu kods ir labs, tad testu rakstīšanai vajadzētu būt jautrai, nevis murgam.

P nozīmē priekšlaicīga optimizācija

Šeit galvenais ir vārds priekšlaicīgi - ja jums tas nav nepieciešams tagad, tad tā ir laika izšķiešana. Labāk koncentrēties uz labu, tīru kodu, nevis uz mikrooptimizācijām, kas parasti rada sarežģītāku kodu.

Es domāju Indescriptive Naming

Tā ir visgrūtākā lieta laba koda rakstīšanā, taču atcerieties, ka tā ir ne tikai pārējā jūsu kodā. komanda bet arī nākotnes jums, tāpēc izturieties pareizi 🙂 Labāk uzrakstīt garu metodes nosaukumu, bet tas pasaka visu, nekā īsu un mīklainu.

D ir dublēšana

Galvenais iemesls, kāpēc kods tiek dublēts, ir ciešas sasaistes principa ievērošana. Ja jūsu kods ir cieši saistīts, jūs vienkārši nevarat to atkārtoti izmantot un parādās dublēts kods, tāpēc ievērojiet DRY principu un neatkārtojiet sevi.

Šobrīd tas nav svarīgi

Vēlos pieminēt arī divas ļoti svarīgas lietas, kuras bieži vien netiek pieminētas. Par pirmo no tām jums jau vajadzēja dzirdēt - tā ir YAGNI, kas nozīmē: jums tas nebūs vajadzīgs. Laiku pa laikam es novēroju šo problēmu, veicot koda pārskatīšanu vai pat rakstot savu kodu, taču mums vajadzētu mainīt domāšanu par kādas funkcijas ieviešanu. Mums ir jāraksta tieši tāds kods, kāds mums ir nepieciešams tieši šajā brīdī, nevis vairāk vai mazāk. Mums jāpatur prātā, ka viss mainās ļoti ātri (īpaši lietojumprogrammu prasības), tāpēc nav jēgas domāt, ka kaut kas kādreiz noderēs. Netērējiet savu laiku.

Es nesaprotu

Un pēdējā lieta, kas, manuprāt, nav īsti acīmredzama un dažiem var šķist diezgan pretrunīga, ir aprakstošais kods. Ar to es nedomāju tikai pareizu nosaukumu lietošanu klasēm, mainīgajiem vai metodēm. Tas ir ļoti, ļoti labi, ja viss kods ir izlasāms no pirmā acu uzmetiena. Kāds ir ļoti īsa koda mērķis, turpretī tas ir tik mīklains, cik vien var būt, un neviens nezina, ko tas dara, izņemot cilvēku, kas to rakstījis? Manuprāt, labāk ir uzrakstīt dažas zīmes.nosacījumu paziņojumikaut ko vairāk nekā vienu vārdu, un tad vakar sēdēja un brīnījās: pagaidiet, kāds ir rezultāts, kā tas notika, un tā tālāk.

const params = [
  {
    filmas: [
      { title: 'The Shawshank Redemption' },
      { title: 'One Flew Over the Cuckoo's Nest' }
    ]
  },
  {
    filmas: [
      { nosaukums: 'Saving Private Ryan' },
      { nosaukums: "Pulp Fiction" },
      { nosaukums: "The Shawshank Redemption" },
    ]
  }
]

// pirmais piedāvājums
funkcija uniqueMovieTitlesFrom (params) {
  const titles = params
    .map(param => param.movies)
    .reduce((prev, nex) => prev.concat(next))
    .map(movie => movie.title)

  return [...new Set(titles)]
}

// otrais piedāvājums
funkcija uniqueMovieTitlesFrom (params) {
  const titles = {}
  params.forEach(param => {
    param.movies.forEach(movie => titles[movie.title] = true)
  })

  return Object.keys(titles)
}

Apkopojot

Kā redzat, ir daudz noteikumu, kas jāatceras, bet, kā jau minēju sākumā, jauka koda rakstīšana ir laika jautājums. Ja sāksiet domāt par vienu kodēšanas paradumu uzlabošanu, tad redzēsiet, ka sekos vēl viens labs noteikums, jo visas labās lietas rodas pašas no sevis, tāpat kā sliktās.

Lasīt vairāk:

Kas ir Ruby on Jets un kā ar to izveidot lietotni?

1TP61Kalendārijs. Jauns Codest projekts, kas balstīts uz Vue.js

Codest iknedēļas pārskats par labākajiem tehnoloģiju rakstiem. Programmatūras veidošana 50M vienlaicīgu ligzdu (10)

Saistītie raksti

Ilustrācija viedtālruņa veselības aprūpes lietotnei ar sirds ikonu un pieaugošo veselības diagrammu, kas apzīmēta ar The Codest logotipu, kurš pārstāv digitālās veselības un HealthTech risinājumus.
Programmatūras izstrāde

Veselības aprūpes programmatūra: Mārketinga programmatūra: veidi, izmantošanas gadījumi

Šodien veselības aprūpes organizāciju rīcībā esošie rīki vairs neatgādina papīra diagrammas, kas tika izmantotas pirms vairākiem gadu desmitiem. veselības aprūpes programmatūra tagad atbalsta veselības aprūpes sistēmas, pacientu aprūpi un mūsdienīgu veselības aprūpes sniegšanu klīniskajās un...

TĀKĀDĒJAIS
Abstrakta ilustrācija ar lejupejošu joslu diagrammu ar augošu bultiņu un zelta monētu, kas simbolizē izmaksu efektivitāti vai ietaupījumus. Augšējā kreisajā stūrī redzams The Codest logotips ar saukli "In Code We Trust" uz gaiši pelēka fona.
Programmatūras izstrāde

Kā paplašināt izstrādātāju komandu, nezaudējot produkta kvalitāti

Palielināt izstrādātāju komandu? Uzziniet, kā augt, nezaudējot produkta kvalitāti. Šajā rokasgrāmatā aplūkotas pazīmes, kas liecina, ka ir pienācis laiks paplašināt komandu, komandas struktūra, pieņemšana darbā, vadība un rīki, kā arī tas, kā The Codest var...

TĀKĀDĒJAIS
Programmatūras izstrāde

Uz nākotni noturīgu tīmekļa lietojumprogrammu veidošana: The Codest ekspertu komandas ieskats

Uzziniet, kā The Codest izceļas mērogojamu, interaktīvu tīmekļa lietojumprogrammu izveidē, izmantojot modernākās tehnoloģijas un nodrošinot viengabalainu lietotāja pieredzi visās platformās. Uzziniet, kā mūsu zināšanas veicina digitālo transformāciju un biznesa...

TĀKĀDĒJAIS
Programmatūras izstrāde

Top 10 Latvijā bāzēti programmatūras izstrādes uzņēmumi

Mūsu jaunākajā rakstā uzziniet vairāk par Latvijas labākajiem programmatūras izstrādes uzņēmumiem un to inovatīvajiem risinājumiem. Uzziniet, kā šie tehnoloģiju līderi var palīdzēt uzlabot jūsu biznesu.

thecodest
Uzņēmumu un mērogošanas risinājumi

Java programmatūras izstrādes pamati: A Guide to Outsourcing Successfully

Izpētiet šo būtisko rokasgrāmatu par veiksmīgu outsourcing Java programmatūras izstrādi, lai uzlabotu efektivitāti, piekļūtu speciālajām zināšanām un sekmīgi īstenotu projektus ar The Codest.

thecodest

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

      The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

      Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

      Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

    lvLatvian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lt_LTLithuanian lvLatvian