Je n'aime pas critiquer. Je n'aime pas non plus râler... Même quand le développeur du projet te fait des remarques... Mais il y a des jours ...

A mon arrivée dans ma nouvelle mission, je suis tombé sur un projet sur lequel je devais rajouter de nouvelles fonctionnalités. Projet (Win App) développé en c# (.NET 1.1, il y a tout juste un an... Tiens, la v2 du framework existait déjà pourtant...), 90% fonctionnel (quelques erreurs encore inexplicables...), un peu plus de 5000 lignes de code, rien de bien méchant quand je pouvais voir le mode de fonctionnement de l'application en elle même.

Bien, après avoir ouvert la solution ... je commençais un peu à changer d'avis...

  • Modèle 1 tier (quoique, des dossiers avaient été créés et dans lesquels il avait mis les formulaires, c'était bien organisé ... )
  • Des projets manquent à la solution (ProjetSetup ? Huh?)
  • Création d'un contrôle DataGridView (Le contrôle DataGrid a été surchargé et modifié de façon à ce qu'il se comporte comme le datagridview actuellement...)
  • etc...

C'était le premier coup d'oeil.. En entrant plus en profondeur dans l'application, j'ai vu des choses pouvant ressembler à ça :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private string GetMonthShortName(DateTime dt)
    {
      string monthShortName = "";
      switch(dt.Month)
      {
        case 1:
          monthShortName = "Jan";
          break;
        case 2:
          monthShortName = "Feb";
          break;
        case 3:
          monthShortName = "Mar";
          break;
        case 4:
          monthShortName = "Apr";
          break;
        case 5:
          monthShortName = "May";
          break;
        case 6:
          monthShortName = "Jun";
          break;
        case 7:
          monthShortName = "Jul";
          break;
        case 8:
          monthShortName = "Aug";
          break;
        case 9:
          monthShortName = "Sep";
          break;
        case 10:
          monthShortName = "Oct";
          break;
        case 11:
          monthShortName = "Nov";
          break;
        case 12:
          monthShortName = "Dec";
          break;
      }

      return monthShortName;
    }

ou encore ça :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private string FormatDate(DateTime dt)
    {
      string year = dt.Year.ToString();
      string month;
      string day;

      if(dt.Month < 10)
      {
        month = "0" + dt.Month;
      }
      else
      {
        month = dt.Month.ToString();
      }

      if(dt.Day < 10)
      {
        day = "0" + dt.Day.ToString();
      }
      else
      {
        day = dt.Day.ToString();
      }

      return year + month + day;
    }

Sans parler de tout ce qui est accès et manipulation de données ... :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public DataSet ExecuteQuery(String myQuery)
    {

      OleDbDataAdapter MyAdap = new OleDbDataAdapter(myQuery, myConnection);
      System.Data.DataSet MySet = new DataSet();

      try
      {
        MyAdap.Fill(MySet);
      }
      catch(OleDbException ae)
      {
        Console.WriteLine(ae.Message.ToString());
      }

      MyAdap.Dispose();
 
      return MySet;
    }

Je commençais un peu à comprendre les 5000 lignes..
Rajouter des fonctionnalités certes, mais dans quel esprit ?
J'ai du retoucher une grande partie de l'application pour l'optimiser (afin que la production continue de tourner), et l'adapter à du "code d'aujourd'hui".. Prochaine étape, la refaire en .NET 2.0 avec un modèle cohérent et plus "propre". Je ne serai pas ce que vous feriez à ma place, mais il y a des jours comme ça...

En passant, quelques liens vers quelques sites / articles intéressants :

et etc... Les ressources pour aider les développeurs sont bien nombreuses, et je pense que nous avons tout de notre côté pour nous aider à fournir un excellent travail.. Bon courage amis développeurs.

Bonne journée

ps:

J'oubliais. Je ne suis pas forcément meilleur, mais bon :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private string GetMonthShortName(DateTime dt)    
{
  return dt.ToString("MMM", DateTimeFormatInfo.InvariantInfo);
}


private string FormatDate(DateTime dt)
    {

      return dt.ToString("yyyyMMdd");
    }


internal DataSet ExecuteQuery(String myQuery)
    {
      DataSet ds = new DataSet();

      try {
        using(OleDbConnection oConn = new OleDbConnection(m_ConnectionString))
        {
          oConn.Open();
          using(OleDbCommand oComm = new OleDbCommand(myQuery,oConn))
          {  
            using(OleDbDataAdapter adapter = new OleDbDataAdapter(oComm)) {
              adapter.Fill(ds);
            }
          }
        }
      }
      catch(Exception ae) { Console.WriteLine(ae.Message); }

      return ds;
    }

A +