Witamy w obrazkowie

March 9, 2007

Problem: zaciężni maruderzy tak namieszali w aplikacji (za ciężką, kontraktorską kaskę!), że nawet po miesiącu przedzierania się z maczetą przez kod, dalej czujesz się jak małe dziecko w dużym ciemnym lesie?

  • W projekcie (a był to .NET) mieliśmy do czynienia z dziesiątkami Solutions (Hej zakochani w eclipsie – solution to coś w stylu workspace) i jeszcze większą liczbą projektów. Nikt, nawet Nostradamus nie wiedział jak rozłożone są zależności między nimi. Jak trzeba było coś zakodować to średnio za trzecim razem otwierałeś w MS Dev Studio “właściwe” Solution, czyli to, które zawierało projekty, które miały kod, który Cię interesował.
  • Solutions miały paskudną właściwość dzielenia pewnych projektów między sobą. Niby niewinne, w praktyce uniemożliwia poważniejszy refaktoring: zmień cokolwiek publicznego, a sąsiednie Solution może się skompiluje. Może.
  • A teraz najlepsze: zależności między projektami były niekiedy binarne (potrzebuje DLLki), innym razem “projektowe” (potrzebuje referencji do projektu). WTF?

Ułatwmy sobie życie obrazkami! Kolega Nick, zasugerował, żeby użyć Graphviza:

1. Bardzo łatwo napisać skrypt, który zaglądnie do plików sln, przejrzy pliki proj i proszę bardzo: NHibernate od kuchni (tylko zależności projektowe):

NHibernate - zależności

2. Trochę za dużo tego, nich skrypt zajrzy tylko do wybranych projektów i niech pokaże zależności binarne:

NHibernate - podprojekty

3. A teraz fajniejsza aplikacja: CCNet. Znacznie prostsza od NHibernate, brak nadmiarowych Solutions, niewiele projektów no i przede wszystkim: Solutions NIE dzielą między sobą projektów:

CCNet - zależności

Coś w tym jest, że aplikacje dotnetowe sprzyjają nadprodukcji Solutions i Projects. Dodaj 10 programistów, 1 rok czasu i proszę bardzo przepis na chaos. Graphviz to bardzo przyjemne narządko, żeby się z tym chaosem zmierzyć (i zrefaktorować bestię).