2016-07-06 4 views
-1

Ich arbeite an einem Embedded-Projekt, das einen Joystick liest und einen Aktor in einem 3D-Raum entsprechend bewegt. Jetzt möchte ich eine Benutzer-Eingabeaufforderung verfügbar über die serielle Leitung als eine alternative Option als Benutzereingabe bereitstellen. Benutzereingabe ist G-Code.Gibt es gut etablierte Entwurfsmuster bei der Implementierung einer Benutzereingabeaufforderung?

https://en.wikipedia.org/wiki/G-code.

Ich bin nicht unerfahren mit der Erstellung von C-Code, aber ich musste nie zuvor mit Texteingabe umgehen. Gibt es gut etablierte Entwurfsmuster dafür, wie Software dieser Art einfach lesbar/wartungsfreundlich implementiert wird?

+0

Die 'gets()' Funktion von 'stdio.h' wird' stdin'. –

+1

OT: @EliSadoff 'gets()' ist nicht mehr C aus guten Gründen, benutze es ** nicht **! Verwenden Sie stattdessen 'fgets()'. – alk

+5

@EliSadoff 'gets' ist so gemein und böse, dass es nicht länger Teil der Standardbibliothek ist und mit extremen Vorurteilen vermieden werden sollte. – WhozCraig

Antwort

2

Nein, es gibt kein "Entwurfsmuster" für eine Benutzeraufforderung.

Designmuster sind bestenfalls marginal. Sie wurden in Arm-Flattern-Reaktion auf die offensichtliche Katastrophe geschaffen, die die meisten Programmierer nicht selbst denken können. Folglich erhalten sie einen langen Katalog früherer Gedanken und detaillierte Anweisungen darüber, wie sie ihre Gedanken diesen in Stein gemeißelten Homologen zuordnen können.

Hier ist ein brillantes Beispiel für ein "Design-Muster": Es ist irgendwie schade, eine globale Variable zu verwenden. Stattdessen wird eine Singleton-Klasse instantiiert (was - wenn Sie nicht vorsichtig sind - erfordert, dass Sie die vermittelten Dienste einer SingletonFactory [aber ich schweife ab]) und "Getter" - und "Setter" -Methoden bereitstellen, die auf die verkapseltes Datum. Ergebnis: Anstelle einer Codezeile, die auf der Leiste liegt, müssen Sie fünfzehn Zeilen Code auf der Leiste angeben. HOGWASH!

Viele werden an dieser Aussage beleidigt sein. Wenn sie nur darüber nachdachten, würden sie erkennen, dass sie einer Farce zum Opfer fielen. Design Patterns sind wie Rubriken in einem "Common Core" englischen Essay: Nehmen wir an, dass der Student völlig unfähig ist, selbstständig kreatives, richtig strukturiertes Englisch zu generieren und lächerlich detaillierte "Anleitung" darüber zu geben, was man sagen und wie man sagen soll es.

Denken Sie selbst. Das ist der beste Rat, den man Ihnen überall geben kann.

+0

ooooh .... die GoF Polizei wird dich dafür bekommen. :) – evaitl

+3

Um fair zu sein, würden einige der gleichen Leute, die behaupten würden - nicht ohne Rechtfertigung - dass die Verwendung von Globals schlechte Form ist, auch behaupten, dass die Verwendung des Singleton-Musters eine schlechte Form ist. In der Tat gelten mehrere der gleichen Gründe. Ich bin ganz dafür, dass ich für mich selbst denke, aber ich bin auch dafür, dass ich von meiner und anderen Erfahrungen profitiere. Die Verwendung von Entwurfsmustern ist nicht inhärent ein vernünftiges Maß für die Codequalität, aber Entwurfsmuster, die sorgfältig ausgewählt und angewendet werden, können Ihnen helfen, Qualitätscode zu schreiben. –

+0

@ JohnBollinger Entwurfsmuster, wie jedes andere Werkzeug in der Toolbox (z. B. Globals), haben ihre Verwendung. Um eines zu verwenden oder nicht, sollte mit Vorsicht entschieden werden (d. H. Nicht sklavisch). Ich benutze Objektpools sehr oft, weil ich sie nützlich finde. Ich erschaffe auch ein Singleton, das eine Menge Items [die sonst Globals wären] kombiniert. Jede Technik, die verwendet wird, sollte in dem bestimmten Kontext bewertet werden: Warum verwenden wir es? Welchen Wert bietet es in diesem Fall? Welche Probleme löst es (oder möglicherweise)? –

Verwandte Themen