Jump to content
php.lv forumi

Scala: kā padot datubāzes sesiju komponentiem?


black

Recommended Posts

Man ir problēma, kuru īsti nemāku atrisināt. Man ir komponenti (cake-pattern), no kuriem dažiem ir nepieciešama datubāzes sesija. Jautājums - kā pareizāk šo datubāzes sesiju padot?

Pieņemsim, ka man HTML pārseris (kodā - SkriesimParserComponent), kurš spēj no HTML nolasīt man interesējošo informāciju (objektus). Tāpat man ir HTML piegādātājs, kuram ir divas iespējamās implementācijas - viena testa (MockSkriesimProviderComponent), kura HTMLu lasa no faila. Otra, produkcijas (SkriesimProviderComponent), kura spēj HTML iegūt no HttpProviderComponent jeb HTTP klienta. HTTP klients, savukārt, izmanto UrlRepositoryComponent jeb URL cache komponentu, kurš jau iegūtos URLus saglabā datubāzē. Visbeidzot, ir SkriesimServiceComponent, kurš spēj vispirms providerim pavaicāt HTMLu, un tad pārserim iedot to nopārsēt, atgriežot jau nopārsētus objektus.

Problēma: ņemot vērā, ka UrlRepositoryComponent izmanto datubāzi, kā vispareizāk no Play Controller padot UrlRepozitorijam sesiju? Izmantojot Slick, sesija ir implicit parametrs. Diemžēl, inicializējot UrlRepositoryComponent trait, es nevaru kā parameter padot šo sesiju. Rezultātā nākas izmantot metodi, kas redzama Application.scala failā. Nesmuks kods, kurš atkārtojas.

Vai kādam ir labākas idejas, kā pareizāk organizēt aplikācijas struktūru, lai varētu ērtāk inicializēt komponentus, kuri izmanto datubāzi?

Edited by black
Link to comment
Share on other sites

Kemito, problēma, kas šeit tiek risināta, ir ne tik daudz ar valodu saistīta, cik ar paterniem (neatkarīgi no valodas). Pie tam Scala šo problēmu risināšanā ir krietni tālāk kā citas valodas.

 

 

black, kā būtu, ja tu DefaultUrlRepository metodēs izsauktu DB.withSession un iegūtu atsevišķu sesiju tur un tur arī aizvērtu?

Link to comment
Share on other sites

Codez, man ir aizdomas, ka apmēram tā arī beigās darīšu. Nice1, kods, ko publicēju, ir tikai pavisam neliela daļa no tā, ko paspēju uzrakstīt Scala kādās 3-4 dienās. Ja vēlies, varu publicēt visu kodu, un tad Tu to varēsi mēģināt dabūt gatavu PHP. Man šķiet, ka Tev neies ātri.

Link to comment
Share on other sites

Man šķiet, ka 3-4 stundās Tu pat īsti nesapratīsi, uz kādiem datiem Tu skaties - paies zināms laiks, kamēr klikšķināsi apkārt pa lapām, studēdams HTMLu, un izdomāsi, kādam vajadzētu būt datu modelim.

 

Es kodu publicēju ar vienu mērķi - lai brēcēji varētu pamēģināt paši uzrakstīt to pašu, vēlams, iepriekš cītīgi nestudējot manu pieeju un kodu.

 

Aiziet - nopublicē GitHubā savu PHP versiju (nav obligāti jābūt pilnīgai, pietiks, piemēram, ar Athlete parseri un funkcijām, kas to saglabā datubāzē). Tad mēs tiešām varēsim salīdzināt PHP / Scala jau pie reāla projekta. Sākumā vari izdomāt, kuru no PHP bibliotēkām HTML parsingam izmantot, tāpat varēsi uztaisīt DB migrācijas, servisu, kas "kešo" jau ievilktos URLus, testēšanai nepieciešamo provideri ar failiem kā datu avotu, utt. Uz kā bāzes Tu taisītu kaut ko tādu? Laravel? Pats rakstīsi no nulles? Padalies ar savu pieeju, nevis čīksti.

Link to comment
Share on other sites

Es ar php string funkcijām ātrāk izparsēšu htmlu

Papētīju kodu, tur tiešām viss kas tiek darīts ir atveram skriesim.lv/clubs un izlasām klubu sarakstu. Un, protams, tas viss tiek darīts ar gatavām bibliotēkām. To īsti nevar nosaukt par programmēšanu, tāda klucīšu salikšana vien ir

Edited by Kasspars
Link to comment
Share on other sites

Beidzot kāds, kurš reāli piesakās kaut ko uzrakstīt! Kaspar, tur ir arī pārseri priekš athletes (atgriež athlete ar visiem race results), varbūt Tev būs interesantāk sākt ar tiem. Es labprāt redzētu ne tikai pliku pārseri, bet arī vispārējo aplikācijas uzbūvi - kā Tu saglabā ierakstus datubāzē, kā nodrošini datubāzes migrācijas, iespējas pārseri aizvietot ar testa (mock) pārseri, utt.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...