black Posted November 25, 2014 Report Share Posted November 25, 2014 (edited) 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 November 27, 2014 by black Quote Link to comment Share on other sites More sharing options...
codez Posted November 25, 2014 Report Share Posted November 25, 2014 Es pats neizmantoju Cake paternu, tāpēc uzreiz nemācēšu pateikt, kas ir vispareizākā metode, bet tā kā traitam padot parametru nav iespējams, tad jāizmanto vien tava vērtības injekcijas metode. Quote Link to comment Share on other sites More sharing options...
black Posted November 25, 2014 Author Report Share Posted November 25, 2014 Ja neizmanto Cake patternu, tad varbūt ir ieteikumi par to, kā to pašu varētu izdarīt, izmantojot jebkuru citu Dependency Injection frameworku, piemēram, MacWire, SubCut vai Scaldi? Galvenā doma, lai es varētu testēt sistēmu, SkriesimProviderComponent aizvietojot ar MockSkriesimProviderComponent. Quote Link to comment Share on other sites More sharing options...
Kemito Posted November 25, 2014 Report Share Posted November 25, 2014 Scalā ir arī problēmas? w0w dude Quote Link to comment Share on other sites More sharing options...
codez Posted November 25, 2014 Report Share Posted November 25, 2014 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? Quote Link to comment Share on other sites More sharing options...
F3llony Posted November 25, 2014 Report Share Posted November 25, 2014 Imagined problems requires imagined solutions... Quote Link to comment Share on other sites More sharing options...
black Posted November 25, 2014 Author Report Share Posted November 25, 2014 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. Quote Link to comment Share on other sites More sharing options...
briedis Posted November 25, 2014 Report Share Posted November 25, 2014 Aiziet, iemet githubā, un izestāsti ~ ko viņš dara. Quote Link to comment Share on other sites More sharing options...
F3llony Posted November 26, 2014 Report Share Posted November 26, 2014 Un tas ir viss? Tādā gadījumā mans pretjautājums - ko tieši no šī visa es nevarētu uzrakstīt PHP, JS, Javā vai C# 3-4 stundās? Quote Link to comment Share on other sites More sharing options...
codez Posted November 26, 2014 Report Share Posted November 26, 2014 Tev vajag 3-4 stundas? Man pietiek ar 27 sekundēm. Mīkstais. Quote Link to comment Share on other sites More sharing options...
F3llony Posted November 26, 2014 Report Share Posted November 26, 2014 Man lēnām pamazām rodas aizdomas, ka tie drīzāk varētu būt kādi 27 gadi... Quote Link to comment Share on other sites More sharing options...
black Posted November 26, 2014 Author Report Share Posted November 26, 2014 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. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted November 26, 2014 Report Share Posted November 26, 2014 Aiziet, briedi, rādi klasi :D Quote Link to comment Share on other sites More sharing options...
Kasspars Posted November 26, 2014 Report Share Posted November 26, 2014 (edited) 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 November 26, 2014 by Kasspars Quote Link to comment Share on other sites More sharing options...
black Posted November 26, 2014 Author Report Share Posted November 26, 2014 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.