2011-01-20 15 views
5

Mam narzędzie Winform, które łączy się ze sprzętem przy użyciu portu szeregowego.Jaki wzorzec projektowy najlepiej sprawdza się przy sterowaniu sekwencją kroków?

Port szeregowy służy do wysyłania poleceń do sprzętu, który będzie potwierdzał polecenia, a czasami zwraca dane.

Aby wykonać zadanie, kilka poleceń należy wysłać do sprzętu w określonej kolejności.

Pomyślnie zaimplementowałem narzędzie, używając instrukcji switch do kontrolowania wysyłania poleceń. Jednakże, podczas gdy to działa, nie mogę nie myśleć, że istnieje lepszy, bardziej OO sposób robienia tego - czy istnieje?

Obecna implementacja jest poniżej:

Każdy przypadek jest polecenie, które wymaga wysyłania do sprzętu. Wysyłana jest metoda wywołania i identyfikator następnego kroku, który zostanie zwrócony, jeśli polecenie zostanie wysłane pomyślnie.

  • Narzędzie wyśle ​​polecenie sesji startowej do sprzętu.
  • Sprzęt potwierdza polecenie.
  • Narzędzie wysyła polecenie ustawienia kierunku do sprzętu.
  • Sprzęt potwierdza polecenie.

itp

MessageID nextStep = MessageID.IMS; 

while (nextStep != MessageID.Stop) 
{ 
    switch (nextStep) 
    { 
     case MessageID.ISS: 
      nextStep = Send(new ISS_StartSession(), MessageID.IE386); 
      RaiseProgressEvent(10); //percentage complete 
      break; 

     case MessageID.IE386: 
      nextStep = Send(new IE386_SetDirection(Direction.BOTH), MessageID.IE378); 
      RaiseProgressEvent(20); 
      break; 

     //etc 

     case MessageID.Error: 
      HandleError(); //abort task if necessary 
      break; 
    } 
} 

Czy istnieje lepszy sposób to zrobić ..?

Czy istnieje dobrze znany wzór projektu, który powinienem obejrzeć?

+0

Czy następny identyfikator wiadomości jest wysyłany do bieżącego połączenia "Wyślij"? –

Odpowiedz

1

Szczególnie jeśli twoje operacje wysyłania/odbierania są asynchroniczne, sugeruję użycie Wzorca polecenia. Here Wyjaśniam, dlaczego uważam, że nadaje się do sekwencji operacji asynchronicznych.

+0

Frank, jak to się dzieje, metody przekazane do metody Send powyżej implementacji (jak sądzę) wzorca polecenia. Każda z tych metod implementuje interfejs ICommand i szczegółowo opisuje sposób wykonywania polecenia przez port szeregowy. Od osób dzwoniących zależy, kiedy należy wykonać polecenie ICommands. Właśnie to chciałem poprawić .. – Kildareflare

+0

@Frank Jak wykorzystać odpowiedź z kroku 1 w kilku dalszych krokach? i jak wykonać następny krok po zakończeniu kroku 2? – Ewoks

0

Proponuję schemat łańcucha odpowiedzialności, ponieważ kroki mogą być powiązane i możesz kontrolować linki w łańcuchu na poziomie klienta.

Powiązane problemy