Programování v C#.Net » Xabatcha blog - Live and let live

MyEgo.cz

home foto blogy mywindows.cz kontakt

Henselmanuv seznam IT otázek pro pohovory VI.

Dneska bude trochu změna, jelikož když jsem si projížděl další otázky z Henselmanova seznamu, tak jsem shledal některé naprosto nezajímavé. Netvrdím, že nejsou důležité, ale kdo se dnes ještě vrtá v COMech? Moc lidí to nebude. Takže otázky týkající se COM jsou z kola venku. Spíše se zaměřím na otázky, které jsou zajímavé z hlediska přijímacích pohovorů. Takže to bude teď trochu na přeskáčku.

26. Co je špatně na DateTime.Parse(myString);?

V podstatě nic, pokud je vám jedno v jakém formátu bude string převeden na datum. Pokud nespecifikujete formát datumu v řetězci, tak hrozí třeba záměna měsíců a dnů viz. US formátování MM/dd/yyy oproti českému formátování dd/MM/yyy. Pak samozřejmě dojde k nekorektnímu výstupu a padne to na vyjímku, když se bude snažit formátovat 13 den jako měsíc.

Ideálně použijte DateTime.ParseExact() místo DateTime.Parse().

 

SCSF: MDI zarovnání child objektů

Vcelku jednoduchá zaležitost, ale hotové řešení pro někoho jiného se vždycky hodí. :-)

Prvně, nastavení umístění child objektů pro MDI parent form se mění pomocí metody LayoutMdi an objektu Form. Např.

LayoutMdi(MdiLayout.TileHorizontal);

Pro porovnání oken jsem použil tento postup:

  • V menu jsou klasicky dostupné položky pro různé typy rozmístění oken.
  • Při kliknutí na vybranou položku se vyvolá klasický command, který vyvolá event, kterou si odebere shell form.
  • V shell formu se pak volá samotné zarovnání child objektů.

SCSF: MDI - Nastavení základních vlastností View

Tak jsem řešil, jak nastavit základní parametry MDI view, respektive vlastností, které jsou dostupné na objektu WindowSmartPartInfo. V mém případě jsem potřeboval nastavit atributy Icon, Title, Width, Height. Ideálním řešením je samozřejmě jen jedno místo, které by bylo dosažitelné v rámci modulu.

Zkoušel jsem například toto:

První ideou bylo získání objektu ISmartPartInfo dle ID z kolekce WorkItem.SmartParts, nastavit vybrané vlastnosti a tím by bylo vystaráno. Avšak tohle řešení nefungovalo ve všech případech. Zkoušel jsem dát metodu, která provede nastavení, jak do presenteru, metoda OnViewReady a i do View, metoda OnLoad, ale v obou případech při otevření nebyl nalezen ISmartPartInfo objekt, který se vázal k danému View.

Zdrojáky vypadali asi takto:

Henselmanuv seznam IT otázek pro pohovory V.

a máme tu další díl seriálu věčné nevědomosti....aneb tohle nikdy neskončí.

21. Může být DateTime null?

Nemůže, jelikož to není třída (class), ale struktura (struct).

22. Co je to JIT? Co je to NGEN? Jaké jsou výhody a nevýhody obou?

JIT - Just In Time

- JIT je zkratka označující způsob zpracování kodu. Hlavním účelem JIT kompilace je docílení optimalizované kompilace, která se provádí až těsně před spuštěním kódu. To má za následek celkově delší dobu spuštění, tzv. startup time delay. Tento nedostatek však plně vyváží optimalizovaný kód, který je kompilován s ohledem na prostředí, procesor či paměť a který urychlí běh aplikace oproti statické kompilace během vývoje.

SCSF: Použití toolbaru v MDI

Při použití toolbaru v MDI aplikaci je častým cílem, v tomto případě i mým, měnit sestavu jednotlivých položek toolbaru dle zobrazeného (aktivního) okna. Klasická konstrukce použitá v SCSF předpokládá využití v podstatě statického toolbaru, který je nahrán při načtení business modulu. Tj. v třídě ModuleController v metodě. Tento přístup nelze tedy použít v případě MDI.
Jak tedy na to?
Update

Henselmanuv seznam IT otázek pro pohovory IV.

Dnes se podíváme trochu na Assembly. Pod pojmem Assembly si lze představit jakoukoliv knihovnu, fyzicky tedy soubor s příponou dll nebo exe soubory. Podrobnější definici můžete na najít na Wikipedii po heslem .Net Assembly.

16. Používá metoda Assembly.Load(...) statickou či dynamickou referenci?
Metoda Load() používá dynamické reference.
Rozdíl mezi statickou a dynamickou referencí je, že statické reference jsou uložené v metadatech během kompilace a zde jsou pak dostupné. Dynamické reference se zjišťují během běhu aplikace, tzv. Run-Time.
Referencí se zde myslí třeba odkaz na metodu definovanou v dané Assembly.

SCSF: Jak přidat submenu pro jednotlivé moduly

Tak se tak prokousávám tím chytrákem SmartClientem a dneska se mi podařilo vyřešit jedna z mnoha věcí a to přidání submenu při načítání modulu.
Problém spočíval v tom, ža objekt UIExtensionSites nepodporuje Get metodu, takže se nemůžete dostat k již existující položce kolekce. Podporované metody jsou jen Add a Remove. V případě menu pak nelze přidat dynamicky menu dle potřeb na příslušné místo.
Jedno řešení je použít další třídu, která pomocí svých public metod bude vracet případné existující objekty. Pomoc jsem našel na SCSF fóru. Komentář obsahuje kompletní zdroják takovéto třídy, kterým jsem vložil do nového projektu, zkompiloval a vložil do referencí jako nový projekt. Záměrně jsem tuto třídu nedával nikam do složky Infrastructure, kde sou rootové projekty, které se automaticky linkují do modulů. Nebyl jsem si jist kam bych mohl tuto třídu dát, jako jediná možná volba by mohl být projekt Infrastructure.Interface, ale ten obsahuje záměrně jen Interface objekty, čímž bych zjevně porušil pravidla nezávislosti.

SCSF - MDI workspace a problémy s ním spjaté

Při použití MDI workspace v SCSF narazíte na pár problémů, které vám udělají pár vrásek na čele. Prvním z nich je, jak správně reagovat na zavření formuláře alias MDI okna pomocí klasického křížku.
Pokud se uzavírá View programově, tak se volá metoda OnCloseView definovaná v Presentru, která zavře View a případně ho i odstraní z WorkItem kolekce. Viz příklad:

Henselmanuv seznam IT otázek pro pohovory III.

Po nějaké době se vracím k seriálu o tématům, které by měl znát, alespoň všeobecně, každý Net programátor pro úspešný průběh pohovoru. Tady je dnešní dávka.

11. Popište rozdíl mezi výrazy Class a Interface
Interface definuje seznam dostupných metod a proměnných, které budou dostupné pro všechny zděděné implementace. Mimo tuto definici neobsahuje žádný jiný kód.
Class neboli třída, obsahuje implementaci tříd a proměnných definovaných na základě zděděného Interface nebo vlastní implementace. Třída tedy obsahuje vlastní kód, který provádí vlastní provedení instrukcí.

SCSF dokumentace

Tak se postupně snažím pochopit smysl všech těch pro mě nových výrazů v programování, např. MVP, MVC, Dependency injection, Smart parts a mnoho dalších. Musím říci, že to není vůbec jednoduché a pokud to člověk nepotřebuje během své normální pracovní doby, tak se do toho člověk dostává dost těžko, alespoň takhle po večerech.
Tento příspěvek píší ze záměrem pomocí případným zájemcům o SCSF implementaci usnadnit pátrání po případné dokumentaci, příkladům či průvodcům.