javascript - Node.js hur implementerar man polymorfism?
Jag försöker implementera en applikation med hjälp av node.js och andra relaterade teknologier. Jag kommer från Java-land och polymorfism känns naturligt, men för den klassiska programmeraren fungerar Node annorlunda.
Applikationen kommer att ladda ny kod under körning som tillhandahålls av användaren. För att huvudkärnan ska kunna använda denna kod behöver vi komma överens om någon form av konvention. Med tanke på hur ny Node är, blev jag inte så förvånad över att jag inte hittade svaret. Problemet är att denna fråga är ganska vag i JS också.
Krav :
- Stark frånkoppling.
- laddar ny kod i kör-tid.
- Lösningen bör vara tillämplig så att jag kan dela så mycket kod som möjligt med webbläsaren.
Uppdatering :
- Jag experimenterade med duck-typing, jag har också stött på idéer från Clojure när det gäller protokollbaserad implementering.
- Jag skulle uppskatta lite kod i svaret.
Svar #1
JavaScript, precis som de flesta andra skriptspråk (dvs. ingen typkontroll vid kompilering) använder polymorfism genom duck-typing.
Om du kommer från Java-land letar du troligen efter Dependency Injection som i allmänhet ger extrem löskoppling. Du kan förmodligen använda Google för att hitta ett bra dependency injection-ramverk för Node, som detta.
Även om sanningen är att du förmodligen bara kan göra en enda Javascript/Coffeescript-fil som hanterar all koppling och konfigurationsladdning.
På grund av flexibiliteten i Javascript har nästan varje form av polymorfism implementerats (traits, gränssnitt, arv, prototyper). Var och en har sina fördelar/nackdelar men nästan alla gör kontroller vid körning (om några) och inte vid kompilering.
Personligen skulle jag antagligen bara använda antingen Coffeescripts arv, traits.js eller Javascripts inbyggda prototypkedja.
REDIGERA: Men eftersom du pratar om att tillåta användare att utöka systemet är callbacks och/eller anpassade händelser det föredragna tillvägagångssättet (dvs. högre ordningens funktionell programmering och event-bus). Om du letar efter något mer omfattande som ett pluginsystem verkar loader-js ganska komplett (hatt-tipset till @Larry Battle).