C# Kilka pytań o dobre praktyki

C# Kilka pytań o dobre praktyki
AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 39
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.
Kopiuj
 
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 ?
Kopiuj
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 ?
Kopiuj
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();
							
fasadin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4883
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

Ktos
  • Rejestracja: dni
  • Ostatnio: dni
1
  1. Ja bym raczej zrobił:
Kopiuj
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.

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
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:

Kopiuj
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)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.