F3llony Posted May 20, 2016 Report Share Posted May 20, 2016 (edited) Nu ja tā nopietni domā par tieši to kodu ne konkrēto piemēru ar static call, tad viss tas kods ir tāds diezgan pabriesmīgs... Kāda velna pēc vispār vienai konsoles komandai būtu vajadzīgi N entrypointi. SRP or naah? Un ja jau konsoles handleris vienalga tiek reģistrēts kaut kā, tad nafig nepadot jau instanci kas implementē kaut kādu komandas interfeisu? Sentence: rm -rf un composer install symfony/console... Edited May 20, 2016 by F3llony Link to comment Share on other sites More sharing options...
jurchiks Posted May 20, 2016 Report Share Posted May 20, 2016 Kāda velna pēc vispār vienai konsoles komandai būtu vajadzīgi N entrypointi. ? Kur tur ir N entrypointi? Un ja jau konsoles handleris vienalga tiek reģistrēts kaut kā, tad nafig nepadot jau instanci kas implementē kaut kādu komandas interfeisu? Because this is way simpler. Priekš kam tu tur kaut kādu interfeisu gribi iebāzt? Ko tas interfeiss REĀLI uzlabos? Sentence: rm -rf un composer install symfony/console... Yep, 10k lines of code for what I could do with 10. Link to comment Share on other sites More sharing options...
jurchiks Posted May 20, 2016 Report Share Posted May 20, 2016 Manuprāt, call_user_func() FTW. Un listMethods() vietā vajadzētu reflection, kurš atfiltrē metodes, kuras sākas ar handler (handlerFoo(), handlerBoo()). call_user_func() ir lēnāks, kaut dara to pašu. Reflection ir vēl lēnāks, un filtrēšana ir VĒL lēnāka. Priekš kam to visu darīt, ja rezultāts ir identisks? Link to comment Share on other sites More sharing options...
F3llony Posted May 20, 2016 Report Share Posted May 20, 2016 Juri, es netaisos ar Tevi diskutēt par programmēšanu, ne vairāk kā ar āzi aiz sētas par Šveices nacionālo nodokļu politiku. Goda vārds. Link to comment Share on other sites More sharing options...
jurchiks Posted May 20, 2016 Report Share Posted May 20, 2016 (edited) Jurchik, izskaidro šito Ja tu izlasītu visu metodi, tad pamanītu, ka ir iespējams piereģistrēt kā konsoles handleri arī parastu funkciju, i.e.: App::registerConsoleHandler('var_dump', 'dumpThis'); `php index.php dumpThis arg1 arg2 arg3` Edited May 20, 2016 by jurchiks Link to comment Share on other sites More sharing options...
jurchiks Posted May 20, 2016 Report Share Posted May 20, 2016 Juri, es netaisos ar Tevi diskutēt par programmēšanu, ne vairāk kā ar āzi aiz sētas par Šveices nacionālo nodokļu politiku. Goda vārds. Tad kāpēc tu diskutē? Link to comment Share on other sites More sharing options...
F3llony Posted May 20, 2016 Report Share Posted May 20, 2016 Tu zini vārda "diskusija" nozīmi? Un atšķirību no verbāla vidējā pirksta Tavā virzienā? :P Link to comment Share on other sites More sharing options...
jurchiks Posted May 20, 2016 Report Share Posted May 20, 2016 Mēs visi labi zinām, ka REĀLA diskusija ar tevi gandrīz nekad nenotiek, tu nodirs, un citi atbild. Tāpēc es pieņemu, ka tāds ir tavs "diskusijas" stils. Link to comment Share on other sites More sharing options...
F3llony Posted May 20, 2016 Report Share Posted May 20, 2016 Pfff. Wut? Link to comment Share on other sites More sharing options...
Mr.Key Posted May 21, 2016 Report Share Posted May 21, 2016 (edited) Yep, 10k lines of code for what I could do with 10. Tīri vispārīgi, ne par šo gadījumu (jo šeit mērķis ir pašam savu konsoli uztaisīt) - ja tā ir viena komanda un pēc tās izpildes gatavs konsoles supports, why not? Šodien taču neviens neskaita diska vietu un tā tālāk. Bet vēlreiz - protams, ja mērķis ir uztaisīt pašam savu, tad jā. Man, piemēram, tāda mērķa nav un es nedomājot ielikšu gatavu konsoli un, visai ticams, nekad neskatīšos tajās 10k rindās, jo risināšu citus uzdevumus. Kāpēc to gribu teikt. Vēlreiz un vēlreiz - apkārt viss mainās, un jāiet līdzi. Man pašam nepatīk (vai nepatika) tas composer, jo ir WTF, es varu taču uztaisīt download, unzip un iekopēt vajadzīgajā direktorijā, bez visādiem tur lock failiem, dependensijiem, utt. Pieņemsim, ka šis izdodas sekmīgi, tāpēc sāku ignorēt arī citus pavērsienus un, skat – esmu jau īpatnis ar irrelevantām zināšanām, kura projekti virzās tik lēni, ka nevienu tas neinteresē. Edited May 21, 2016 by Mr.Key Link to comment Share on other sites More sharing options...
jurchiks Posted May 21, 2016 Report Share Posted May 21, 2016 (edited) Man nav iebildumu pret composer, bet ir iebildumi pret masīviem projektiem, kuri dara būtībā vienkāršas lietas. Fancy features aside, tur nekā tāda nav, un lielāko daļu to fīču nevienam arī nevajag. Es esmu ieinteresēts uztaisīt tikai absolūto minimumu, un pārējo jau var labot/likt klāt pa savam atkarībā no nepieciešamības. Edited May 21, 2016 by jurchiks Link to comment Share on other sites More sharing options...
F3llony Posted May 21, 2016 Report Share Posted May 21, 2016 ... Diez jams kādreiz sapratīs, ka visas tās komponentes ir pamatā pilnīgi decoupled un tas, ka tur ir 10k lines of code nenozīmē, ka visas jamas ir jāizmanto? Piemēram, vienkāršai konsoles app vajag ko? Input, Output un Application. Application pati salasa komandas vai jamas manuāli piereģistrē iekš šā, tur ir option un argument parser, un viss. Tajā pašā laikā visa komponente nespiež nevienu no daļām īsti izmantot un pie reizes atrisina problēmu ar komandrindas parsēšanu un help ģenerēšanu. Tik sasodīti vienkāršs dīls un noklāts ar testiem, so var būt drošs, ka nekas nepabruks. Tajā pat laikā, es vēl atceros laikus kad es arī gribēju visus riteņus pats pārrakstīt. Tas gan bija pirms gadiem 10 un beidzās līdz ar brīdi, kad atklājās, ka darot kaut ko produktīvi par to var saņemt pieklājīgu samaksu :DD Link to comment Share on other sites More sharing options...
jurchiks Posted May 21, 2016 Report Share Posted May 21, 2016 (edited) >var būt drošs, ka nekas nepabruks. Ok, kas manā kodā var pabrukt? Tur reāli koda ir tik maz, ka nekas nevar nobrukt. Tajā Symfony konsolē ir tik daudz koda, ka visus bagus nevar izķert. + vēl ir tāda štelle, ka ir daudzreiz ātrāk 5 minūtēs uzdrukāt šādu primitīvu kodu, kurš dara visu, ko vajag, un par kuru tu automātiski zini visu, ko vajag zināt, nekā nokačāt symfony konsoli un tad pusstundu studēt, kā panākt visu, ko tev vajag izdarīt. Edited May 21, 2016 by jurchiks Link to comment Share on other sites More sharing options...
F3llony Posted May 21, 2016 Report Share Posted May 21, 2016 (edited) :D tu uz tā sava koda cyclomatic complexity esi paskatījies? Es esmu diezgan drošs vismaz viens 5inieks Tev tur toč atradīsies. Tev nav testu. Izmaiņas kodā var izraisīt kaut kādus side-effects par kuriem Tu nezini. Nepatīk PHPUnit? Izmēģini PHPSpec, vismaz; Symfony konsole ir burtiski noklāta ar testiem, no A-Z; Symfony konsolei ir visaptveroša dokumentācija; http://symfony.com/doc/current/components/console/introduction.html- lai uztaisītu elementāru Sy console app nepieciešami minimums vien 2 faili - index un vismaz 1 komanda. Ja Tev nepieciešama pus stunda lai saprastu kā šis darbojas, man Tev ir pagalam bēdīgas ziņas. SOLID Tavā brūvējumā ir pilnībā noignorēts; Tātad, maintainability ir crap. Tev ir nulle dokumentācijas whatsoever. Arī kods pats sevi nepaskaidro ne cik labi. "Ātrāk 5 minūtēs uzdrukāt" nav labākais arguments diskusijā par softu. Tavs 5 minūšu garbage, kas makes sense tikai Tev pašam visiem pārējiem iespējams makes no sense whatsoever. Šeir ir neliels work in progress no manis, rakstīts uz Symfony komponentēm (freimworks PHAR pakotām CLI aplikācijām) - https://github.com/protobileŠeit ir sample komanda: https://github.com/protobile/project/blob/master/src/AppBundle/Commands/HelloWorldCommand.php, šeit ir Tava imo - https://github.com/jurchiks/simpleframe/blob/master/app/classes/ExampleConsoleHandler.php Salīdzini, un padomā. Geee. Edited May 21, 2016 by F3llony Link to comment Share on other sites More sharing options...
jurchiks Posted May 21, 2016 Report Share Posted May 21, 2016 (edited) >tu uz tā sava koda cyclomatic complexity esi paskatījies?Un tavs kods ir labāks? >Tev nav testuJau atrunāts. >Symfony konsole ir burtiski noklāta ar testiem, no A-Z;Tas nenozīmē, ka tur nav neviena baga. >Symfony konsolei ir visaptveroša dokumentācijakura prasa daudz laika, lai iemācītos vienkāršas lietas >SOLID Tavā brūvējumā ir pilnībā noignorētsNe pilnībā. Maintainability is not a problem because there's so little code. Symfony maintainot gan ir "jautri". >Tev ir nulle dokumentācijas whatsoever.Tāpēc, ka kods ir self-explanatory. >Arī kods pats sevi nepaskaidro ne cik labi.Piemēram (ja neskaita šo konsoles handlera reģistrāciju, kurai gan ir usage piemērs)? Un te neiet runa par internal API, kuru end useris neredz, tā kā to tu uzreiz vari aizmirst.Es uzskatu, ka koda piemēri ir daudz vērtīgāki par dokumentāciju. Ja ir kaut kādi baigi daudzie varianti, ko kādam API var padot, tad var vēl blakus piemēram komentāru bloku uzrakstīt, bet ne vairāk. >Tavs 5 minūšu garbage, kas makes sense tikai Tev pašam...Mans 5 minūšu "garbage" ir saprotams max 1 minūtes laikā, ja prot lasīt kodu. >Šeit ir sample komandaPriekš konsoles komandas, kas izvada "Hi there, world!", tas ir daudz par daudz koda. Turklāt tai Symfony console struktūrā, vienai komandai obligāti nepieciešama vesela klase ar vairākām metodēm. Manā gadījumā 1 klasē var būt jebkāds skaits komandu, katrai sava metode. Un vēl ir tāds feins punkts, ka Symfony konsolei vajag uztaisīt objektu katrai konsoles handlera klasei tikai lai uzzinātu, kādu komandu tā handlo. Es jebkurā brīdī varu pierakstīt ConsoleHandler klasei klāt metodi ar, piemēram, šādu API: protected static final function validateArguments(array $arguments, ArgumentDefinition ... $definitions): bool { // loop through $definitions, validate against $arguments } pielietot to, piemēram, šādi: use \simpleframe\ConsoleHandler; use \simpleframe\console\ArgumentDefinition as AD; class MyConsoleHandler extends ConsoleHandler { public static function command(...$arguments) { if (!self::validateArguments($arguments, AD::stringArgument(), AD::intArgument()->optional())) { echo 'Usage: php index.php command stringArgument[, intArgument]', PHP_EOL; return; } } } un arī tad manā kodā viss būs īsāk. Ja nu man nenormāli gribētos named parameters, tad var uztaisīt `protected static final function parseArguments(array $arguments, ParameterDefinition ... $definitions): array`, kas samapo uz nosaukumiem, kuri padodas, piemēram, `AD::stringArgument('name goes here')`. Optional argumentiem value būtu vienkārši null. Tas viss ir elementāri un ātri uztaisāms un notestējams, un tur būtu ļoti maz koda. Edited May 21, 2016 by jurchiks Link to comment Share on other sites More sharing options...
Recommended Posts