Vývojářský blog Tomáše Hercega

Tisk článku Tisk článku

Galerie programátorských hříchů – Bezúčelné změny API

[Zpět na blog]

Datum: 5. 1. 2010 19:11       Autor: Tomáš Herceg       Zobrazeno: 1935x

Kategorie: Život, vesmír a vůbec


Uznávám, že při vývoji knihovny je v jistých okamžicích z pohledu vývojářů jistou část API prostě odstranit, protože není uvnitř napsána hezky, a nahradit ji částí novou, která je uvnitř zbastlená řekněme o trochu méně. Inu, pokud to má své opodstatnění a nové API je kvalitnější, proč ne, sice se musí změnit často podstatné části kódu, ale udělal bych to rád, pokud uvidím zřejmé výhody.

Je mi ale záhadou, proč se někdo z vývojářů knihovny SlimDX, kterou používám ve své bakalářské práci, ráno vzbudil a řekl si, že by mohl metodě Vector3.Unproject změnit hlavičku třeba zrovna takto:

// staré
public static Vector3 Unproject(Vector3 vector, Viewport viewport,
Matrix projection, Matrix view, Matrix world);

// nové
public static Vector3 Unproject(Vector3 vector, float X, float Y, float width, float height,
float minZ, float maxZ, Matrix worldViewProjection);

Parametry X, Y, width, height, minZ a maxZ jsou hodnoty vlastností ze struktury Viewport. Ano, přidat nový overload se hodí v případě, že tyto hodnoty máme v proměnných a nemáme pro ně založenou strukturu Viewport.

Parametr worldViewProjection jsou akorát vynásobené původní parametry projection, view a world.

Chování funkce se zvnitř nezměnilo, přidání nového overloadu je opodstatněné. Ale proč sakra u všech všudů ten starý overload, který dostával naprosto ta samá data, odstranili? To ho tam nemohli prostě a jednoduše nechat? Ničemu tam přece nepřekážel!

Poučení pro příště – pokud vyvíjíte kód, který ostatní používají, pokud to jenom trochu jde (a v tomto konkrétním případě to šlo bez debat), nerušte metody či jejich overloady, pokud to opravdu není nutné.


> Na začátek

 

Hodnocení:

Hlasů: 0
Zvolte své hodnocení

Tomáš Herceg

Jsem hlavním softwarovým architektem ve společnosti Riganti. Mám dlouholeté zkušenosti s technologiemi ASP.NET, Silverlight, WPF a XNA. Působím též jako lektor ve společnosti Gopas a již třetím rokem jsem držitelem ocenění Microsoft Most Valuable Professional.

Podpořte vznik dalších článků
RSS Feed RSS Feed

Diskuse

1 

Proč nepoužít jednu stabilní verzi?

Datum: 5.1.2010 21:33
Autor: Ondřej Linhart
Hodnocení autora: 1132
Příspěvků: 2395
Tak je pravda že by se tam měla původní verze nechat a třeba opatřit atributem <Obsolete()>, ale na druhou stranu nechápu proč hned při vydání nové verze toho API na něj musíte migrovat. Vyvíjel bych na jedné stabilní verzi a potom nevzniknou takovéto problémy.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Proč nepoužít jednu stabilní verzi?

Datum: 5.1.2010 22:12
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
1. Obsolete by to ani být nemuselo, protože ta funkce dělá to samé, akorát se jí předávají parametry v jiné formě - místo jednoho parametru typu struktura se jí předá 6 parametrů, což jsou vlastnosti v té struktuře.
2. Na novější verzi (označenou jako stabilní) jsem přešel, protože ta předchozí (taky stabilní) měla pár nepříjemných bugů.

Ale stejně asi použiju něco jiného, protože pořád s tím jsou nějaké problémy.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Proč nepoužít jednu stabilní verzi?

Datum: 5.1.2010 22:27
Autor: Ondřej Linhart
Hodnocení autora: 1132
Příspěvků: 2395
Já hlavně nechápu proč se zabývat takovou opensource ubohostí jako SlimDX, když lze použít XNA Framework nebo starší verzi Managed DirectX.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Proč nepoužít jednu stabilní verzi?

Datum: 5.1.2010 23:26
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Managed DirectX je už dost dlouho zastaralý a neaktualizovaný, XNA je na něco jiného, než potřebuji, a k mým potřebám se nehodí, je určené na hry a ne na grafické okenní aplikace.
SlimDX je jediný wrapper, který funguje jak na Windows Vista, Windows 7, tak i na Windows XP.
Asi ale použiju Windows API Code Pack, i za cenu toho, že to nepůjde na XP a Vistě, ale jen na Windows 7. Mají totiž napsanou komponentu pro integraci s WPF, což potřebuji.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Proč nepoužít jednu stabilní verzi?

Datum: 5.1.2010 23:44
Autor: Ondřej Linhart
Hodnocení autora: 1132
Příspěvků: 2395
A co je to za projekt že k němu nestačí XNA nebo WPF? O WPF vím že podpora pro 3D v něm je naprosto základní a nedá se v tom udělat prakticky nic, ale XNA by měla být plnohodnotná náhrada MDX ve které lze dělat i 3D aplikace běžící v okně.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Proč nepoužít jednu stabilní verzi?

Datum: 5.1.2010 23:48
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
V XNA se dá udělat i aplikace běžící v části okna a je i pár samplů, jak to zaintegrovat do WPF aplikace, ale je to strašné ohýbání technologie, která je určena na dělání her a ne na vývoj editoru 3D grafiky, na kterém zrovna pracuju. Navíc neumí DirectX 10.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Proč nepoužít jednu stabilní verzi?

Datum: 8.1.2010 13:46
Autor: Tomáš Jecha
Hodnocení autora: 704
Příspěvků: 1287
I intergrace do okna Windows Forms je hnus. Nenašel jsem rozumné řešení, které by se dokázalo obejít bez přepsání hlavních herních objektů.

Je to škoda, co bych dal za jednoduchý managed 3D engine pro vykreslování i aplikačních záležitostí přímo od Microsoftu.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Proč nepoužít jednu stabilní verzi?

Datum: 10.1.2010 14:51
Autor: Ondřej Linhart
Hodnocení autora: 1132
Příspěvků: 2395
Proč by to byl hnus?! Každá druhá hra má možnost přepnout se do režimu zobrazení v okně... No a veškeré 3D aplikace rovněž běží v okně, kde jsou současně i panely nástrojů atd.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Proč nepoužít jednu stabilní verzi?

Datum: 10.1.2010 14:55
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Ano, většina her tohleto umí, ale většina her není psaná v XNA, které renderování jinam než do okna, které si samo vytvoří, bůhvíproč nepodporuje. Abyste toho dosáhnul, musíte vykopírovat kusy kódu z Reflectoru, udělat z toho vlastní třídu a pár věcí v ní změnit. A to je prostě hnus. Nedá se to udělat hezky pomocí dědičnosti, příslušné metody nejsou virtuální a některé proměnné, které potřebujete, jsou private.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Proč nepoužít jednu stabilní verzi?

Datum: 10.1.2010 15:16
Autor: Tomáš Jecha
Hodnocení autora: 704
Příspěvků: 1287
Špatně jsem se vyjádřil. Hnus není integrovat 3D aplikaci / hru do okna, ale způsob jakým se toho dá dosáhnout v XNA.

Není to o nějaké změně hodnot, ale o ohnutí celého mechanismu vykreslování pomocí oken bez rámů v jiném okně a nahrazování celé herní smyčky s tím, že XNA s tím absolutně nepočítá s spoustu věcí je potřeba úplně přepsat.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...
1 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.