A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | AA | AB | AC | AD | AE | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Feature/Attribute | Why Important? | Weight (Importance to you) | Framework | ||||||||||||||||||||||||||||
2 | Fulcro | (weighted score) | Reagent | (weighted score) | Redux | (weighted score) | Angular | (weighted score) | Rum | (weighted score) | ||||||||||||||||||||||
3 | Uses a true functional programming langauge | FP brings a number of benefits to development, including better local reasoning, easier testability, state history, better support for server-side concurrency. | 10 | 10 | 100 | 10 | 100 | 0 | 0 | 10 | 100 | |||||||||||||||||||||
4 | Easy to Hire Developers | Do you think you can find sufficient staff? While clj/cljs are easy to learn, there are fewer people that already know them. | 2 | 3 | 6 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
5 | Eliminates sources of complexity like Controllers, library event systems (signals), etc. | These artifacts bring a lot of incidental complexity to a program. Events/signals are hard to trace/debug, and lead to all sorts of head scratching. | 5 | 10 | 50 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
6 | Reuses Patterns People Know. Is fast to get started with. | Sometimes your need to get going fast trumps your need for cleaner code. Fulcro might mean you have to learn clj, cljs, AND new ways of building apps. | 3 | 5 | 15 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
7 | One Language on Client and Server | Using clj/cljs means that everything has one basic form: EDN. A data notation that is concise, transmittable. Also maximizes code reuse since you can write functions once and use them in both. | 5 | 10 | 50 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
8 | Longevity | Web frameworks evolve rather rapidly, but you'd rather not have the one you're building with disappear. Most things that make it to commercial use have a decent number of people with vested interest in keeping it going, but anything edgy is more risky. Then again, support for those that chose Angular 1 a few years ago anyone? | 5 | 7 | 35 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
9 | Eliminates Chattiness/Need for REST (Demand driven architecture) | REST is a chatty API with poor data type support. Fulcro uses EDN, sends concise queries over the wire, and gives the benefits explained in GraphQL and Falcor. | 5 | 10 | 50 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
10 | Enables Support VCR Viewer | Often the most difficult thing to do when bugs happen in the field is figure out what went wrong. Fulcro can be configured to allow users to send a bug report that includes the history of their UI, which can be replayed (with timestamps) by the developer and even debugged against! | 5 | 10 | 50 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
11 | Includes Build Tools for minification, etc. | One project file configures compilation, minification, deployment artifact creation, etc. No messing with browserify. | 5 | 10 | 50 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
12 | Server-Side Rendering | Supports rendering the UI on the server for things like SEO and fast-looking initial page loads. | 5 | 10 | 50 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
13 | Good for Rapid frame-based Animation (e.g. graphical games) | If you're writing a graphics game, then you mainly want some kind of rendering loop on a canvas. | 0 | 5 | 0 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
14 | Code Splitting | Load parts of your program dynamically at runtime | 5 | 10 | 50 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
15 | Bandwagon (easy sell to co-workers/management) | If you have existing staff that is scared of the cutting edge, then it might be difficult to get buy-in. If a developer's heart isn't in it, then you will probably fail. | 2 | 1 | 2 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
16 | UI Easy to Visually Regression Test | With pure functional rendering, you can create devcards that show each possible state of a UI. Scripting screen shots can then be used to "test" if things like CSS changes break things! | 4 | 10 | 40 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
17 | Has Good Tool Support | Things like React Tools for Chrome, devtools (cljs), IDEs, etc. | 6 | 7 | 42 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
18 | Hot Code Reload WITH reliable state persistence. | This is a fairly common feature these days, but with pure functional rendering it means you don't have to navigate back to where you were after a hot reload. | 7 | 10 | 70 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
19 | Good Testing Story | Does it easily support: CI, Unit testing, Integration Testing, Property-based tests with a very limited need to write UI scripts against a live browser? | 6 | 10 | 60 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
20 | Queries from UI are Datomic Graph Queries | Allows very easy server-side querying when using a Datomic Database. | 0 | 10 | 0 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
21 | Generates and can Use third-party things | React component libraries, JVM libraries, plain JS libraries, etc. Fulcro runs on the JVM and cljs has a great js interop story; however, the Fulcro model sometimes does not mix well with the model of other libs. | 5 | 7 | 35 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||
22 | ||||||||||||||||||||||||||||||||
23 | ||||||||||||||||||||||||||||||||
24 | Max: | 850 | 88.82% | 11.76% | 0.00% | 0.00% | 11.76% | |||||||||||||||||||||||||
25 | ||||||||||||||||||||||||||||||||
26 | ||||||||||||||||||||||||||||||||
27 | ||||||||||||||||||||||||||||||||
28 | ||||||||||||||||||||||||||||||||
29 | ||||||||||||||||||||||||||||||||
30 | ||||||||||||||||||||||||||||||||
31 | ||||||||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||||||||
33 | ||||||||||||||||||||||||||||||||
34 | ||||||||||||||||||||||||||||||||
35 | ||||||||||||||||||||||||||||||||
36 | ||||||||||||||||||||||||||||||||
37 | ||||||||||||||||||||||||||||||||
38 | ||||||||||||||||||||||||||||||||
39 | ||||||||||||||||||||||||||||||||
40 | ||||||||||||||||||||||||||||||||
41 | ||||||||||||||||||||||||||||||||
42 | ||||||||||||||||||||||||||||||||
43 | ||||||||||||||||||||||||||||||||
44 | ||||||||||||||||||||||||||||||||
45 | ||||||||||||||||||||||||||||||||
46 | ||||||||||||||||||||||||||||||||
47 | ||||||||||||||||||||||||||||||||
48 | ||||||||||||||||||||||||||||||||
49 | ||||||||||||||||||||||||||||||||
50 | ||||||||||||||||||||||||||||||||
51 | ||||||||||||||||||||||||||||||||
52 | ||||||||||||||||||||||||||||||||
53 | ||||||||||||||||||||||||||||||||
54 | ||||||||||||||||||||||||||||||||
55 | ||||||||||||||||||||||||||||||||
56 | ||||||||||||||||||||||||||||||||
57 | ||||||||||||||||||||||||||||||||
58 | ||||||||||||||||||||||||||||||||
59 | ||||||||||||||||||||||||||||||||
60 | ||||||||||||||||||||||||||||||||
61 | ||||||||||||||||||||||||||||||||
62 | ||||||||||||||||||||||||||||||||
63 | ||||||||||||||||||||||||||||||||
64 | ||||||||||||||||||||||||||||||||
65 | ||||||||||||||||||||||||||||||||
66 | ||||||||||||||||||||||||||||||||
67 | ||||||||||||||||||||||||||||||||
68 | ||||||||||||||||||||||||||||||||
69 | ||||||||||||||||||||||||||||||||
70 | ||||||||||||||||||||||||||||||||
71 | ||||||||||||||||||||||||||||||||
72 | ||||||||||||||||||||||||||||||||
73 | ||||||||||||||||||||||||||||||||
74 | ||||||||||||||||||||||||||||||||
75 | ||||||||||||||||||||||||||||||||
76 | ||||||||||||||||||||||||||||||||
77 | ||||||||||||||||||||||||||||||||
78 | ||||||||||||||||||||||||||||||||
79 | ||||||||||||||||||||||||||||||||
80 | ||||||||||||||||||||||||||||||||
81 | ||||||||||||||||||||||||||||||||
82 | ||||||||||||||||||||||||||||||||
83 | ||||||||||||||||||||||||||||||||
84 | ||||||||||||||||||||||||||||||||
85 | ||||||||||||||||||||||||||||||||
86 | ||||||||||||||||||||||||||||||||
87 | ||||||||||||||||||||||||||||||||
88 | ||||||||||||||||||||||||||||||||
89 | ||||||||||||||||||||||||||||||||
90 | ||||||||||||||||||||||||||||||||
91 | ||||||||||||||||||||||||||||||||
92 | ||||||||||||||||||||||||||||||||
93 | ||||||||||||||||||||||||||||||||
94 | ||||||||||||||||||||||||||||||||
95 | ||||||||||||||||||||||||||||||||
96 | ||||||||||||||||||||||||||||||||
97 | ||||||||||||||||||||||||||||||||
98 | ||||||||||||||||||||||||||||||||
99 | ||||||||||||||||||||||||||||||||
100 |