Aggiungerei enumerazioni alla mia classe renderebbe il mio codice più compatto o efficiente?

1

Sto lavorando su una libreria di classi C # da utilizzare per i miei colleghi durante la programmazione di telecamere industriali.

Sto cercando di determinare sia il metodo più compatto ed elegante per scrivere la classe. I comandi sono stringhe, di cui molto è duplicato, per esempio

1) cmdCamera ID:1 Pan:Right Speed:127
2) cmdCamera ID:1 Home
3) cmdCamera ID:1 Focus:Auto or cmdCamera ID:1 Focus:Manual

..... hai avuto l'idea ....

La mia prima iterazione della classe è solo una serie di metodi che l'utente può chiamare

1) private void CameraMove (int CameraID, string Direction, int Speed)
 (then use StringBuilder to create string to send to camera)
2) private void CameraHome()
 (send string to camera)
3) private void AutoFocus (bool AF)
 (send string to camera)

Anche se funziona bene, mi sembra che ci dovrebbe essere un modo più compatto per costruire la libreria.

Ho pensato che potrei essere in grado di utilizzare un'enumerazione in modo che l'utente finale possa inserire qualcosa come:

 CameraMove.Pan = Right
 CameraMove.Speed = 127

Nella libreria di classi, potrei usare quindi Switch per analizzare il comando e concatenare tutto nella stringa di comando per la videocamera.

Pensieri su questa strategia? C'è un modo migliore per farlo?

    
posta Norm Schaeffer 02.03.2016 - 17:03
fonte

2 risposte

2

Non sono sicuro che renderà le cose più compatte , ma le renderà più chiare . Dovresti davvero sforzarti per questo.

Invece di avere una stringa per la Pan-direction, usare un enum è un modo eccellente per indicare che può essere passato solo un numero limitato di valori. Inoltre riduce notevolmente la quantità di convalida che è necessario fare come fa il compilatore per te. Non c'è modo di passare "foo" come pan-direction.

La velocità sembra un buon candidato per un oggetto di piccolo valore. Puoi avere un oggetto PanSpeed che prende la velocità come numero intero e incapsula il valore int. Ciò ti consente di convalidare il numero intero di velocità e di limitarlo a un intervallo valido (presumo che sia un numero non negativo con un limite superiore).

    
risposta data 02.03.2016 - 20:35
fonte
0

@JDT - grazie per l'idea.

private void CameraTilt(int speed, string direction)
      {
                if (speed > 20)
                {
                    speed = 20;
                }
                else if (speed < 0)
                {
                    speed = 0;
                }

                StringBuilder sb = new StringBuilder();
                sb.Append("camera tilt ");
                sb.Append(direction);
                sb.Append(" ");
                sb.Append(Convert.ToString(speed));
                string _tilt = sb.ToString();

                SendToCamera(_tilt);

            }
    
risposta data 03.03.2016 - 21:54
fonte

Leggi altre domande sui tag