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