2016-08-23 18 views
0

Während wir eine Engineering-Anwendung mit einem React Redux-Framework geschrieben haben, stießen wir auf eine Datenbank mit Produkten, die Funktionen zur Berechnung ihrer Ladekapazitäten und anderer Eigenschaften haben. Ich weiß, dass es keine gute Idee ist, die Funktionen in den Laden zu laden, und die Funktionen von einem anderen Ort in dem Reduzierer zu holen bricht die Reinheit und macht den Reduzierer viel schwieriger zu testen.Redux-Speicher mit mathematischen Formeln als Funktionen

Ist ihre React Redux-Art, die Reducer mit der Datenbank von Produktfunktionen als Parameter oder ähnliches zu versorgen, ohne sie in den Laden zu bringen und ohne Reinheit zu brechen?

Edit:

Jedes der Produkte haben Funktionen, die zum Beispiel die Beziehung zwischen Klinkenverlängerung und Belastbarkeit beschreiben könnten. Diese Beziehung ist normalerweise nichtlinear und enthält ein Diagramm, das die Kapazität über ihren erweiterbaren Bereich hinweg in Beziehung setzt. Wir haben Kurvenanpassungswerkzeuge verwendet, um diese Graphen an Funktionen über ihren Bereich anzupassen. Ich möchte diese Funktionen in einem Reducer verwenden können, so dass, wenn jemand ein Produkt und eine Erweiterung auswählt, wir die Kapazität erhalten und seine Eignung gegen andere berechnete Lasten in dem Zustand prüfen können.

+0

Können Sie die Details Ihres Anwendungsfalls beschreiben? Wenn Sie einige allgemeine Hilfsfunktionen haben, denke ich, dass es eine Art "single source" ist. Aber wenn jeder Datenbankeintrag eine eindeutige Funktion hat, ist das keine gute Idee. – darkbaby123

Antwort

1

Ein paar Gedanken:

  • Ja, einschließlich nicht-serializable Elemente wie Funktionen in Aktionen oder den Laden Zustand auf jeden Fall abzuraten, mit der Begründung, dass es in der Regel Zeitreise Debuggen brechen. Jedoch, wenn das kein Problem für Sie ist, ist es ist etwas, was Sie tun könnten. Siehe http://redux.js.org/docs/FAQ.html#organizing-state-non-serializable und http://redux.js.org/docs/FAQ.html#actions-string-constants.
  • Ein anderer Ansatz wäre es, die mathematischen Funktionen in einer Lookup-Tabelle zu halten, und umfasst einen Funktionsnamen in der Aktion, die verwendet werden kann, in dem Minderer
  • Eine dritte Option die korrekte mathematische Funktion für den Einsatz zu sehen ist, zu tun mehr von der Arbeit in Thunk-Action-Ersteller, und legen Sie die Ergebnisse der Berechnungen in die Aktion.
+0

Zur Zeit erwäge ich Option 2. Ich war anfangs zögerlich, da es den Reducer unrein machen würde, aber dann erkannte ich, dass wenn ich die Datenbank der Funktionen in den Reducer curry, dann wäre es noch testbar und nicht so unrein? So etwas wie 'createStore (reducerWithDatabase (productDatabase))'. 'var reducerWithDatabase = (productDatabase) => (state, action) => state' – Adam

+0

Das ist ein Weg, es zu tun, denke ich. Das heißt, wenn die Reducer-Funktion andere Funktionen als Teil des Prozesses nennt, wird sie nicht "unrein", solange diese Funktionen selbst rein sind und keine Nebenwirkungen haben. Mathematische Funktionen scheinen reine Funktionen zu sein, daher sollte es gut sein, sie anzurufen, um Arbeit zu leisten. – markerikson

Verwandte Themen