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

Tomáš Herceg       5. 1. 2010       Offtopic       6422 zobrazení

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é.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

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

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já hlavně nechápu proč se zabývat takovou opensource ubohostí jako SlimDX, když lze použít XNA Framework nebo starší verzi Managed DirectX.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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ě.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Š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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback