C# Kilka pytań o dobre praktyki

0

Witam
Mam kilka pytań odnośnie dobrych praktyk w C#:

  1. Ostatnio staram się wychwytywać wyjątki zamiast pisać jednego catch'a tworzę takie coś ? Pytanie czy to dobre podejście, czy lepiej pisać wiele instrukcji catch.
 
catch(Exception ex)
{
        if (ex is NullReferenceException)
        {
             // jakis kod
        }
        else
        {
              ProcessError(ex, result);
        }
}
  1. Jak radzić sobie z wieloma parametrami w metodzie, dokładniej chodzi mi o długie wiersze. Tak wiem, że jeżeli parametrów jest więcej niż 3 powinniśmy tworzyć osobną klasę. Czy lepszym jest pierwsze czy drugie rozwiązanie ?
var refillResult = db.Pick_PDAMoveQtyToBoxPallet(userId, "HHT", 5000, pickId, stockId,
         palletSSCC, boxResult.BoxId, qty, objParam, objParamMessage);

var refillResult = db.Pick_PDAMoveQtyToBoxPallet(userId, "HHT", 5000, pickId, stockId,
                               palletSSCC, boxResult.BoxId, qty, objParam, objParamMessage);
 
  1. To samo co w 2, co powiecie o takim formatowaniu ?
result.Result = db.StockMoveJob_BrowseByZoneAndBoxBarcode(zoneId, boxBarcode).
                            Select(c => new StockMoveJob
                            {
                                StockMoveJobId = c.StockMoveJobId,
                                LocationBarcode = c.LocationBarcode,
                                ProductBarcode = c.barcode,
                                ProductDescription = String.Format("{0} {1} {2} {3}",
                                    c.PartNumber, c.Description, c.Variant1, c.Variant2),
                                StockQty = c.Qty,
                                TypeBarcode = BarcodeTypeEnum.Product,
                                BoxId = c.BoxId
                            }).FirstOrDefault();
							
0
  1. Jezeli logika sie rozni od typu exceptiona to wtedy wiele blokow, jezeli sie nie rozni to mozna jeden blok. Ale staraj sie nie uzywac GonnaCatchThemAllbo to ogolnie zla praktyka, staraj sie miec jakis wspolny interfejs

  2. stworzyc klase dla wspolnych elementow. formatowanie kodu jest juz czysto subiektywna rzecza. Ja np wole jak wszystko jest w jednej linii

  3. Formatowanie moim zdaniem jest wporzadku

1
  1. Ja bym raczej zrobił:
catch (NullReferenceException)
{
    // jakis kod
}
catch (JakisInnyException)
{
    // jeszce cos innego
}
catch (Exception ex)
{
    // wszystko inne zawiodło
}

Ale raczej taki globalny catch (Exception) na wszystko, co nie zostało złapane wcześniej to zrobiłbym na poziomie całej aplikacji, aby się nie wywaliła.

1
  1. Jest to zła praktyka. Robi się tak jak @Ktos napisał. Dodam jeszcze, że łapiesz wyjątki tam gdzie masz co z tym zrobić. Wszystkie wyjątki (Exception) łapiesz dopiero na szczycie łańcucha wywołań, żeby apka się nie wyłożyła (tak jak już napisał @Ktos), lub tam gdzie możesz kontynuować wykonanie zadania np. w pętli.

Ad. 2 to różnie, ale najczęściej sposób 1.
Ad. 3 Formatowanie jest poprawne, ale ja robię to zwykle tak:

result.Result = db.StockMoveJob_BrowseByZoneAndBoxBarcode(zoneId, boxBarcode)
   .Select(c => new StockMoveJob
   {
      StockMoveJobId = c.StockMoveJobId,
      LocationBarcode = c.LocationBarcode,
      ProductBarcode = c.barcode,
   }).FirstOrDefault();

Staram się ograniczać długość linii, bo potem wygodniej jest przy podzielonym ekranie, albo przy diffie side to side w gicie

PS. Nie ma sensu używać String.Format gdy mamy interpolację stringów (C# 6.0)

1 użytkowników online, w tym zalogowanych: 0, gości: 1