Staňte se programátorem: Aplikace s podporou doplňků

Diskuze čtenářů k článku

08. 06. 2009 20:44

"která vytvořenou instanci vrací zaboxovanou v datovém typu object"

zaboxovani (boxing) je v .NETu velmi specificky termin pro zabaleni value typu do referencniho

v tomto pripade o nic takoveho nejde, protoze implementatori IPlugBase nejsou structy, inty a podobna havet, ale classy, a tudiz vzdy referencni typy

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
09. 06. 2009 06:22

www stránky a dozvěděl jsem se že:

Webové stránky firmy jsou nyní ve výstavbě.

Website of the firm is under construction at the moment.

Těšíme se na Vaši budoucí návštěvu RM Software.

We are looking forward to your future visit of RM Software site.

V případě jakéhokoliv dotazu pište na richard.matyas@rm-software.cz

In case of any question please contact richard.matyas@rm-software.cz

Souhlasím  |  Nesouhlasím  |  Odpovědět
09. 06. 2009 10:10

Nojo, teprv firmu rozjizdim ale neboj, do dvou tydnu by uz mely byt

puvodne jsem dokonce premyslel o tom udelat je v silverlightu, ale pak jsem od toho kvuli jeho jeste male rozsirenosti ustoupil a jsou normalne v asp.net

Souhlasím  |  Nesouhlasím  |  Odpovědět
09. 06. 2009 10:29

ale jinak ti budu, az budou stranky hotove, vdecny, kdyz budes obsahy mych stranek roznaset po ruznych webech

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 19:04

Ono původně jsem to chtěl udělat způsobem if (type.IsInstanceOf(typeof(IPlugBase)), ale v přehršli vlastností, které typ Type má, jsem zapomněl, která z nich to je vlastnost IsInstance jsem přehlédl, a proto jsem to udělal tím horším způsobem if (type.Name == "neco").

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 20:40

No, ja vlastne nevim, jestli zrovna metoda IsInstanceOf() toto dela, duvod, proc jsem to psal, je demonstrace toho principu, ze pokud mozno, je daleko lepsi pouzit funkce, ktere nejakou cinnost delaji, namisto jejiho obchazeni pomocnymi konstrukty.

Jestli to nedela zrovna IsInstanceOf(), bude to v kazdem pripade jina funkce (napr. pres type.GetInterfaces(), neni nic jednodussiho, nez si to vydebugovat a vyzkouset, nez to kvaknu do clanku), .NET ma na reflexni zjistovani cehokoliv propracovany system, a kdyz to slo i u win32 C++ (RTTI), tady to musi jit dvojnasobne.

Ale daleko horsi nez pripadne "utnuti se" v zavolani nespravne funkce v ukazce kodu mi jako programatorovi prijde prave uceni tech spatnych principu, v tomto pripade kontrola na jmeno tridy.

Clanek je o podpore pluginu a pritom prave toto dela dost spatne.

Asi zacnu pro zive.cz, az me nekdo z nich kontaktuje, psat sam

Souhlasím  |  Nesouhlasím  |  Odpovědět
09. 06. 2009 10:39

nic ve zlym, ale jestli si pletes styl psani kodu s logikou kodu, nevis k cemu je IsInstanceOf() a dalsi .... tak jak by to asi dopadlo?

Souhlasím  |  Nesouhlasím  |  Odpovědět
09. 06. 2009 16:24

no rozhodne lip nez tenhle clanek

prave protoze si styl s logikou nepletu, ale jen jsem si myslel, ze pises o obojim najednou (holt si nectu kazdy prispevek 2x), tak jsem ti odepisoval, ze to neni o stylu, ale o logice - viz moje dve slova velkymi pismeny

jestli IsInstanceOf vraci pravdivy vysledek i pro implementovane interfacy, zpameti opravdu nevim, to se klidne priznam, pouze mi na prvni pohled pripadlo, ze by to vracet mohlo, pro ucely prispevku do diskuze tomu opravdu nehodlam venovat vic casu

ale za jedno dam klidne ruku do ohne - ze reflexi lze v .NETu zjistit, jestli nejaka trida implementuje nejaky interface, a tudiz jediny spravny postup je takovou funkci pouzit namisto testovani nazvu tridy; to je vse, co jsem mel svym prispevkem na mysli, nejsem chodici encyklopedie a v bezne praxi neni nic jednodussiho nez juknout do MSDN nebo vydebugovat

ale rekl bych, ze na programatora jsou v prve rade naroky na mysleni a analyticke schopnosti nez na encyklopedicke znalosti

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 13:02

"Nestačí vám náš seriál? Pořiďte si knihu jeho autora, ve které vás seznámí s tisícovkou programovacích tipů a technik."

fakt nechapu, jak dnesni lide naprosto nemaji soudnost; byt Amadeem, tak se stydim v rohu a ucim se od programatoru a uplne na konci seznamu svych zahanbenych pocitu bych mel touhu napsat knihu a svym programatorskym umenim se "chlubit" celemu svetu

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 13:48

vzdy platilo, ze "kdo to neumi, ten to uci"

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 10:29

V pripravovanom .NET 4.0 je velmi zaujimava kniznica na pluginy MEF (Managed Extensibility Framework), da sa pouzit aj v .NET 2.0:

http://www.codeplex.com/MEF...

Momentalne este jej vyvoj nie je kompletne ukonceny ale rozhodne je velmi dobre pouzitelna. Dlho som hladal nieco "dobre" na takuto architekturu, a MEF-ko z najdenych rieseni vyslo najlepsie. MEF nie je IoC kontajner, aj ked maju spolocne crty - takze sa nehodi na niektore veci. Neriesi tiez verzionovanie a pouziva len 1 assembly, takze unload pluginov nie je kompletne vyrieseny (vzdy sa unload-nu vsetky).

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 10:28

ale aspon nekdo jim radi.

Musim rict, ze zapis kodu je strasny - proc se autore nedrzite stylu zapisu daneho od MS? Ve vasem stylu je citit zapis z kdysi pouzivaneho jazyka C.

Coz je ale vice tristni je tento radek: "if (t.Name == "Plugin")".

V profesionalnim programovani neni nic horsiho, nez delat porovnavani a prirazeni pomoci textu. Je daleko lepsi zjistit, zda trida podporuje dany interface pro pluginy, nebo zda je podedena z predka (tridy) pro pluginy.

A kdyz uz neco zverejnujete jako clanek, pak by bylo na miste si aspon overit clanek na pravopisni chyby (dinamicky/dynamicky, ...)

No a posledni vec - reseni ukazuje, jak si muze nekdo zaintegrovat vizualni komponentu do sve aplikace, ale uz neukazuje tu podstatnejsi cast - jak vytvorit plugin opravdovy. Opravdovy plugin totiz vyuziva jadro aplikace - tridy a funkce. A o tom, jak tridy/funkce jadra zpristupnit pluginu - o tom by mel byt ten clanek.

Ale i na tyto drobne nedostatky chci pochvalit ochotu pomoci zacatecnikum.

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 11:42

Na preferencích stylu zápisu kódu není nic špatného. Každému se MS zápis líbit nemusí. Taky preferuji autorův zápis, zapisuji tak snad ve všech jazycích, zapisoval jsem tak i Javu. Učitele to sice štvalo, ale co s tím nadělá ... je to správně. A opravdu nechápu, proč na to nadáváte: Nelíbí? Nechte být!

Ještě bych se chtěl zeptat, pod jakou že licencí je ten zdrojový kód?

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 12:07

Ja na to nenadavam, ja to konstruktivne kritizuji!

Problem v spatnem a svevolvem zapisu je ten, ze vysledkem je spatna citelnost a zabrano zbytocne mnoho radku. To pouzivaji lide, kteri delaji na vlastni pest, ale v profi teamech, kde jde o efektivitu a profesioanlitu se tohle nedela.

Naprikald zapis ctoru do vice radku zabira misto naprosto zbytecne. Zapis ctoru do vice radku se pouziva jenom a pouze tehdy, kdyz se dokumentuji vstupni parametry.

Na druhou stanu nahnacat vsechny metody v tride v unite bez odradkovani .... to je zase setreni radku na spatnem miste.

Ale nepsal jsem jen o stylu zapisu, to at si kazdy dela jak chce - aspon se dle toho pozna rozdil mezi profikem a nadsencem, ovsem v prikladu jsou daleko vaznejsi - konstrukcni - nedostatky.

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 12:57

No, mozna tady zaznelo, ze jde o preferenci stylu, ale podle me to vubec neni pravda.

To, zda kod zapisu "if (type.Name == "neco")" nebo "if (type.IsInstanceOf(typeof(IPlugBase))", NENI o tom, jakou si zvolim preferenci. To NEJSOU dva ekvivalentni zapisy. Tyto dve varianty maji rozdilna chovani a rozdilne vyhody a nevyhody a dobry programator by se mel rozhodovat podle nich a ne podle toho, "co je mu milejsi".

Vyhody druheho zapisu jsou vice nez jasne, predevsim jde o to, ze to, podle ceho se poznava, ze nejaka trida implementuje IPlugBase, je opravdu to, ze ho implementuje. A ne to, ze se nejak jmenuje. Kdyz si udelam dllku, kde si udelam tridu Plugin, ktera IPlugBase implementovat nebude, a strcim ji do Plugins adresare, tak kod v clanku se s vyjimkou zhrouti na radku "b = (Core.IPlugBase)ass.CreateInstance(t.FullName);". A navic ta prvni varianta vubec nuti pisatele pluginu vedet, ze se ta trida musi jmenovat Plugin - proc ?

V kodu jsou jeste dalsi naprosto skolacke chyby. Volne stojici literaly v kodu, pojmenovavani promennych naprosto nicnerikajicimi nazvy (napr. b). I sam typ IPlugBase ma naprosto nevhodny nazev. Nazev typu konciciho na Base se dava vyhradne bazove tride, a jen pokud je i tato trida schovana za ifacem z duvodu napr. unit testu, pak ma smysl jeste INecoBase. Samotny interface ma zacinat pouze na I, v tomto pripade IPlugin, jinak tim autor mate programatory, kteri na tom projektu maji dal pracovat, vcetne tech, co budou psat samotne pluginy.

Zkratka a dobre, ty mozna jo, ale takove programatorske ucho, co tohle vymodlilo, bych ve sve firme nezamestnal, ani kdyby mi platil !

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 13:47

no jen ja mam pocit, ze Vy mluvite o necem jinem - mam dojem, ze si pletete logiku se stylem. Styl je to, ze pouzivam, odrakodvani, nebo pouzivam dve mezry misto 4 mezer, ze pisu ctor na vice radku, misto na jeden a pod. Tohle "if (type.Name == "neco")" vs. "if (type.IsInstanceOf(typeof(IPlugBase))" uz neni o stylu zapisu, ale o logice programu.

Ja jsem psal puvodne o obou vecech zvlast.

No a nevim, ale zas tak tvrdy na nekoho byt fakt nemusite.

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 15:54

aha to se pak omlouvam, mel jsem zato, ze rec je o jedne veci v obou pripadech

pro me samotny zapis neni az tak dulezity jako chyby v one logice, za ty tvrdy opravdu jsem, protoze ty velmi znekvalitnuji program

u nas pracoval jeden programator, ktery kazdou privatni funkci pojmenovaval prvNeco... a taky jsem si na jeho kod zvykl

Souhlasím  |  Nesouhlasím  |  Odpovědět
08. 06. 2009 12:59

ano, ucitele to sice stvalo, ale co s tebou nadela... blba holt logice nenaucis a na vyhazov jsi asi nebyl

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor