2009-03-04 4 views
-2

Wenn Sie eine sehr parallele Anwendung in C# zu schreiben, planen, ist es besser, Dinge zu bauen sehr klein, wieAtomic oder Gigantic

20 kleine Klassen, 40 größere Klassen zu machen und zusammen 60 mehr machen, für ein insgesamt 120

oder gigantisch wie:

diese 60 Klassen einzeln macht (noch mit Wiederverwertbarkeit im Auge).

Also in # 2 diese 60 Klassen können Methoden enthalten, Dinge anstelle von anderen Klassen zu tun.

+0

Kann jemand mit Rechten die Frage ein wenig aufräumen. Ich denke, es ist ok mit guten Antworten, aber die Frage könnte sauberer/besser geschrieben sein. – BuddyJoe

Antwort

4

Kleinere Teile sind einfacher zu testen, einfacher zu refaktorieren und einfacher zu warten.

5

Zusammenfassend würde keiner dieser Ansätze einen Unterschied machen.

Konkret bedeutet die Minimierung des veränderbaren Zustands, dass Ihre Anwendung mehr parallelisiert werden kann. Jedes Mal, wenn Sie den Status einer Instanz Ihres Objekts ändern, erzeugen Sie das Potenzial für Threadsicherheitsprobleme (entweder Komplexität oder Bugs; wählen Sie mindestens einen aus). Wenn Sie Parallel LINQ oder funktionale Sprachen mit Betonung der Parallelität betrachten, werden Sie feststellen, dass das Klassendesign weniger wichtig ist als die Vermeidung von Zustandsänderungen.

Klasse Design ist für Ihre Gesundheit. Locker gekoppelter Code macht Sie vernünftiger. Unveränderbare Objekte machen dich paralleler. Kombinieren Sie nach Bedarf.

4

Nicht die Größe der Klassen, sondern der Umfang der Kopplung.

Für parallele Anwendungen sollten Sie unveränderliche Objekte bevorzugen - manchmal "Wertobjekte" genannt, anstatt Objekte mit vielen Eigenschaften. Wenn Sie Operationen anwenden müssen, die neue Werte ergeben, erstellen Sie einfach neue Objekte als Ergebnis.

Beobachten Sie eine gute Trennung von Bedenken und lassen Sie sich dadurch zur natürlichen Anzahl von Klassen führen, die die Konzepte in Ihrem Programm repräsentieren. Ich empfehle die von Robert Martin von ObjectMentor katalogisierten und popularisierten SOLID-Prinzipien. (Das sollte genug Google-Futter sein, um die Liste zu finden!)

Schließlich empfehle ich auch, dass Sie vertraut sowohl mit System.Threading und System.Collections. Die meisten Sammlungen sind nicht von Natur aus threadsicher, und die Synchronisierung ist notorisch schwer zu erreichen. Also, Sie sind besser dran mit weit verbreiteten, getesteten, zuverlässigen Synchronisationsprimitiven.