Temat: DataGridy - jakaś alternatywa dla standardowego DataGridView
Cel uświęca środki, przynajmniej w informatyce.
CodeProject jest skarbnicą wiedzy, którą dzielą się między sobą programiści. Kod jest jedynie wyrazem pewnej myśli, idei. Ilu ludzi, tyle "wykonań".
Zatem: idea. Jeśli szukam na szybko czegoś, do rysowania barkodu, to interesuje mnie jedynie funkcja "DrawBarcode", nic więcej. Jeśli chcę automatycznie opublikować raport RDL na serwerze, to interesuje mnie składnia i działający przykład (a to często niewypowiedzianie więcej, niż suchy MSDN). Jeśli interesuje mnie, jak szybko wyszarzyć formatkę pod dialogiem, to jestem ciekaw, czy komuś działa to równie wolno, jak mnie, czy może szybciej - bo wymyślił lepsze podejście.
Które być może zaprogramował ...owo :) pod względem "inżynierskim".
Oczywiście statystycznie "niemożliwym" jest, by wszystkie były "słabe". Znam CP (prawie, ze na pamięć) od kilku dłuuugich lat, przekopałem je wzdłuż i wszerz, pod kątem rozwiązań dla różnych platform. Są tam kody, które może nie najlepiej zapisano, ale służą mi z powodzeniem od 2004 :)
Dla mnie, w danej chwili, daleko ważniejsze od "czystości kodu" jest, by uzyskać satysfakcjonujące mnie rozwiązanie problemu, punkt zaczepienia. Od tego bowiem zależeć będzie dalsze pokierowanie pracami analitycznymi, projektowymi i programistycznymi. A to, co znalazłem tam, daleko przebija (oczywiście IMHO) wszystkie inne znane mi portale "z kodem".
Kiedy to osiągnę, mogę iść dwiema drogami.
Pierwsza - mam DLLkę i dopóki działa, jak mi jest to potrzebne, jakość kodu w niej mnie nie interesuje. To dobre podejście, pod warunkiem, że DLLka przeszła testy jednostkowe i wydajnościowe.
Jeśli potrzebuję dodatkowej funkcjonalności, osiągam ją przez wzorce projektowe. Włączenie komponentu do projektu następuje na zasadzie czarnej skrzynki.
Druga droga wynika z potrzeby modyfikacji istniejącego kodu (bugi, gruntowna zmiana działania). Wtedy trzeba przegryźć się przez kod, zmodyfikować go. I wtedy - owszem - to, co napisałeś ma kluczowe znaczenie.
A w każdym razie tak kluczowe, jak dbałość o te szczegóły w danym projekcie, w danej firmie. Wiem z doświadczenia, że w największych korporacjach są grupy, gdzie obiektowość sprowadza się do... tworzenia obiektów. A są malutkie firmy, gdzie wdraża się pełne TDD... :) Jeśli zatem w projekcie przykłada się dużą wagę do jakości kodu, to masz rację. Ale nie znam projektu (ale może po prostu takiego nie widziałem), gdzie strata z powodu zbyt strukturalnie napisanego komponentu (dostępnego za darmo, rozwiązującego wiele problemów na daną chwilę) przewyższała zysk z jego znalezienia. Po prostu brało się DLL i dołączało. A komponenty z CP wykorzystywane były hurtowo.
No dobra, "stanowiły fundament" :)
Tak właśnie przegryzałem się przez wspomniany grid. Nie wiem, czy jest napisany bardzo źle - przywykłem do takiego, jaki jest, jestem zatem nieobiektywny :)
Wracając do tematu - CP to kopalnia pomysłów i wykonania. Są wykonania lepsze i gorsze. Jeśli wykonanie jest ocenione wysoko, raczej nie przejmuję się jakimiś tam niedociągnięciami i staram bardzo stronić od "puryzmu technologicznego". Po prostu zapoznaję się z kodem, przeglądam listę komentarzy (tam często są opisy bugów i łaty), testuję, kompiluję, wdrażam - i zapominam na wieki wieków.
Czasem, z kolei, rozwiązanie jest ocenione kiepsko - a mnie dokładnie o to chodzi i to wystarcza. Przecież nic nie stoi na przeszkodzie, by przepisać kod bardziej obiektowo, jeśli ktoś uważa, że zachodzi taka potrzeba.
Tak się ładnie rozgadałem, ale to dlatego, by jednak nie straszyć potencjalnych użytkowników CP przed tym portalem, bo często znaleźć tam można wyjątkowe perełki, w dodatku aktywnie testowane przez wielu koderów.
A oczywiście przychodzi kiedyś moment, gdy "główny techniczny projektu" stawia sobie pytanie: czy nie czas przejść na coś płatnego, ze wsparciem technicznym?
Często tak. Ale nie zawsze.
Pozdrowienia z Sosnowca :)
PS: jeden z moich kolegów wiesza psy na Krypton Toolkit, a ja go bardzo lubię :) Ilu ludzi, tyle podejść...
Adrian Olszewski edytował(a) ten post dnia 31.05.09 o godzinie 20:36