Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

Wyjątkowe wydanie (exceptional release)

Jak można było się domyślić moje zainteresowanie ReSharperem oraz dodatkami do niego nie wzięło się znikąd. Jakiś czas temu wpadła mi do głowy myśl, aby napisać dodatek, który pomagałby mi w pisaniu niezawodnego kodu.

Na co dzień pracuję przy dużym projekcie, składającym się z wielu modułów. Pisząc własny moduł często zmuszony jestem korzystać z API innych modułów. Wszystko jest pięknie, dopóki nie zaczynają się pojawiać tzw. unhandled exceptions. W Javie mamy checked exceptions. Dzieki nim mamy pewność, ze żadnego wyjątku nie przegapiliśmy. Stwierdziłem, że R# będzie dobrą podstawą do zaimplementowania takiego mechanizmu dla C#. Co więcej pozwoli zaimplementować także rozwiązania pojawiających się problemów.

W moim zamyśle do deklaracji rzucanych wyjątków służy dokumentacja xml, która dostarcza znacznika <exception />. W nim możemy udokumentować pojedynczy wyjątek rzucany z dokumentowanego elementu. Zadaniem dodatku jest przeanalizowanie wyjątków wyrzucanych z tymi udokumentowanymi. Na tym algorytmie bazuje pierwsza wersja, którą właśnie udostępniłem.

Zapraszam na stronę projektu, gdzie znajdują się szczegóły.

http://exceptionalplugin.codeplex.com/

Opublikowane 20 marca 2009 17:55 przez nuwanda

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

# re: Wyjątkowe wydanie (exceptional release)

20 marca 2009 21:40 by Procent

Definietly do ściągnięcia i wypróbowania, dzięki!

# re: Wyjątkowe wydanie (exceptional release)

21 marca 2009 10:06 by Krzysztof Koźmic

Calkiem niezly pomysl.

W pewnym zakresie Agent Johnson notyfikuje o nieudokumentowanych wyjatkach, ale tylko jeden poziom wglab.

Zdecydowanie godne wyprobowania.

Pytanie (feature request ;))

W przypadku takim:

public interface ISomething

{

void IThrow();

}

public class IThrow:ISomething

{

void IThrow(){throw new InvalidOperationException();}

}

Czy plugin przeniesie dokumentacje wyjatku na interface?

Ponadto moglby miec warning w przypadku gdy developer rzuca albo lapie System.Exception

Dobra robota, trzymaj tak dalej!

# re: Wyjątkowe wydanie (exceptional release)

21 marca 2009 18:25 by nuwanda

@Krzysztof: Tak Agent Johnson ma co podobnego, ale w bardzo ograniczonym zakresie. Co do Twojego requestu to jak najbardziej chcę to obsłużyć, ale jeszcze nie zastanawiałem się głębiej jak taki fix powinien działać. Jakieś sugestie?

# Wtyczka do R# ułatwiająca stosowanie dobrych praktyk dla wyjątków

22 marca 2009 10:15 by dotnetomaniak.pl

Dziękujemy za publikację - Trackback z dotnetomaniak.pl

# re: Wyjątkowe wydanie (exceptional release)

22 marca 2009 13:53 by Krzysztof KoĹşmic

Widze to tak:

Skoro dokumentacja jest dziedziczona, powinna znajdowac sie tylko na typie ktory deklaruje dana metode/property/cokolwiek.

Fix widze jako proste, "Udokumentuj wyjatki" gdy kursor jest na metodzie albo "udokumentuj FooException" gdy kursor jest na throw new FooException().

Jesli metoda jest odziedziczona z klasy bazowej/interface, dokumentacja powinna byc umieszczona na typie ktory deklaruje metode.

# re: Wyjątkowe wydanie (exceptional release)

23 marca 2009 11:53 by nuwanda

@Krzysztof: Twoje uwagi zostały zapisane. http://exceptionalplugin.codeplex.com/WorkItem/View.aspx?WorkItemId=2346

Zainteresowanych zapraszam do dyskusji.

# Code Contracts - {P} C {Q}

24 marca 2009 01:25 by .neting in the free world

Wstęp Od kiedy zacząłem programować zawsze miałem ten sam problem, jak efektywnie oprogramować walidację

# Na CodeCampie byłem, sesję zrobiłem.

23 maja 2009 22:48 by nblog

Dzisiejszy dzień spędziłem na konferencji Code Camp w Warszawie. Po raz pierwszy byłem w roli prelegenta.

# Code Contracts - {P} C {Q} (Aktualizacja: 09-06-04)

4 czerwca 2009 01:09 by .neting in the free world

Aktualizacja 2009-06-04 (oryginał z 2009-03-24 01:17). To, co mnie zawsze denerwuje w postach po sieci

Co o tym myślisz?

(wymagane) 
wymagane 
(wymagane) 

  
Wprowadź kod: (wymagane)