Dnes jsem vymyslel jednu programátorskou hádanku. Zajímalo by mě, zda ji někdo vyřeší, nepatří mezi ty nejlehčí :-). Tady je:
Tři programátoři Jack, John a Jeff píšou aplikaci pro evidenci zakázek jedné menší firmy. Rozhodnou se, že projekt se bude skládat ze 3 assembly (dll knihoven):
- datová vrstva
- vrstva business objektů
- prezenční vrstva
Indicie:
(1) Třída A používá třídu ComboBox.
(2) Třída B, I a J používá třídu DbCommand.
(3) Jeff nepsal žádné rozhraní.
(4) Třída C implementuje rozhraní H.
(5) Třída B používá třídu F.
(6) Internal rozhraní H psal John.
(7) Třída I je internal a psal ji Jack, stejně jako třídu A.
(8) Třídy A a C jsou ve stejné assembly.
(9) Třídy J a E používají třídu I.
(10) Třídu public B a rozhraní H psal stejný vývojář.
(11) Internal třída F je v jiné assembly než třída A a I, ale psal ji stejný vývojář.
(12) Jack při psaní projektu neudělal žádnou chybu.
Otázka:
Který z programátorů by si zasloužil výchovný pohlavek a proč?
Pokud přijdete na odpověď, zkuste si ji nechat zatím pro sebe - jen mi pošlete mail na jechtom[uzenáč]seznam.cz a já přidám příspěvek, že jste úspěšně úlohu vyřešili.
Řešitelé:
- 21.6.2009 00:20 - správné řešní Marek Eichler
- 22.6.2009 20:15 - správné řešní Pavel Veselý
- 23.6.2009 10:10 - správné řešní Rudolf Franěk
- 23.6.2009 10:46 - správné řešní vlko a stopo
- 23.6.2009 20:44 - správné řešní Tomáš Beránek
- 23.6.2009 23:11 - správné řešní Martin Vích
Řešení
Slib zveřejnit řešení se mi vytratil z hlavy, omlouvám se a děkuji Honzovi za upomenutí. Jak to tedy bylo? Použiji řešení od Martina Vicha, které mi přišlo jako jedno z nejsrozumitelnějších (jen jsem do závorek přidal komentáře a čísla bodů, podle kterých lze jednotlivá tvrzení podpořit):
Chybu udělal John, protože použil třídu DbCommand v business vrstvě a obchází tak datovou vrstvu, který by měla jako jediná komunikovat s databází.
Třída A - prezenční vrstva, protože ComboBox (1)
Třída I - datová vrstva, protože DbCommand (2)
Třída F - business vrstva, protože je v jiné assembly než A a I (11)
Všechny tyto třídy psal Jack, takže jsou dobře. (12, 7, 11)
B implementuje F, která je internal, takže je v business vrstvě (k internal třídě totiž nelze přistoupit z jiné assembly). (5, 11)
B používá DbCommand, což je v business vrstvě chyba (s databází má komunikovat jen datová vrstva). (2)
B a rozhraní H psal jeden člověk, takže to musí být John. (6, 10)