7 ms·
This is one architecture that is made possible by clojure: http://tonsky.me/blog/the-web-after-tomorrow http://tonsky.me/blog/the-web-after-tomorrow To build i
by dustingetz 10y ago
This is one architecture that is made possible by clojure: http://tonsky.me/blog/the-web-after-tomorrow http://tonsky.me/blog/the-web-after-tomorrow
To build it outside of clojure ecosystem, you would need to first build all the pieces of the clojure ecosystem
- deleted 10y ago[deleted]
- jrcii 10y agoThanks for pointing me to that article. I've been mulling over for years how to architect apps to remove the server, that layer never sat well with me. I've also found I couldn't discuss the problem with anyone because "clients can't access the database directly!" is such a knee-jerk reaction.
- yawaramin 10y agoIf clients access the database directly, then the database is now the server. You haven't removed the server, you've just moved it.
- jrcii 10y agoBy removing the server-side layer I mean, for example, moving the "model" logic in MVC to the client. The database is still there, but it doesn't perform any application logic, so the server-side layer is moved to the client, not the database. The challenge then becomes authorization. Ideally even the database would be ad-hoc distributed yet would maintain authorization functions or at least the practical result of them, so there's no server-side whatsoever.
- HillRat 10y agoBut if your server doesn't enforce data consistency -- that is, the business logic resides on the client -- you can't rely on the quality of your input. And if your authorization sanitizes the data to ensure consistency, then you've just built your middle tier for logic.
- toasterlovin 10y agoYou still need to do all the same things as before. Some things you move to the client, other things you move to the dbms. There isn't some functionality that magically disappears when you no longer have, for example, a PHP/Ruby/Python/JS/whatever server mediating between your client and your database.
- jrcii 10y agoMy proposal is that almost nothing moves to the dbms, everything moves to the client except perhaps authorization. Unfortunately I can't fully defend my line of reasoning without saying, here's a link to my fully described or developed alternative architecture, which I don't have. However that doesn't mean it's not possible, it seems to me to be achievable. Even if it would require changes to HTTP, the database (row, column, and cell-level authorization?), or the browser - the end result would presumably be worth it. I imagine it would be much easier to reason about an application that is data and data authorization on one side, and logic on the other.
- toasterlovin 10y ago> I imagine it would be much easier to reason about an application that is data and data authorization on one side, and logic on the other. You're basically describing, for example, a Ember/Android/iOS + Rails + Postgres app. Logic lives in the client (Ember/Android/iOS). Data + Authorization lives in Rails + Postgres. And the Rails part of that is really not doing much. It's deciding if a request is allowed, then serializing or deserializing data from the database. I guess you can do that in the dbms, but you still need to do that somewhere.
- dustingetz 10y agoThe object-relational impedance mismatch disappears when the dbms is an immutable time series, which means a whole bunch of plumbing code does indeed evaporate
- toasterlovin 10y agoHow do you decide who can write to and read from your data store?
- Dr_tldr 10y ago> To build it outside of clojure ecosystem, you would need to first build all the pieces of the clojure ecosystem That's simply untrue, and even the author's conclusions contradict your point. You can already do all of these things with just javascript. And if you're arguing that javascript has rebuilt the entire clojure ecosystem, then what is the non-aesthetic case for clojure? I like clojure a lot and I've made a few toy projects with it, but I see its primary value as helping me write better code in all languages I use.
- erichmond 10y agoWhat do you think the time delta would be between building it in JS vs Clojure would be? Just curious.
- Dr_tldr 10y agoIt really depends on so many different factors. The javascript ecosystem is at least 100x the size of clojure's, but as a consequence, the average quality of what's available is much lower. If the pre-existing libraries and services will work for your use case, javascript is going to be faster, simply because most of the code you need has already been written. Another important consideration is your familiarity with both. If you have a deep knowledge of javascript and its ecosystem, many of the architectural wins you get from clojure out of the box are fairly trivial to port over. I suspect the reverse is not as true, because a clojure expert dipping their toes into javascript doesn't have as clear a picture of what the limitations are and how to overcome them. As we can already see in this thread, there's a tendency for people who use clojure to believe that some architectural concepts are literally impossible for all other languages, rather than merely less common or requiring some pre-configuration.
- agumonkey 10y agoFunny how more and more application are becoming game-like rendering system.
- amelius 10y agoHas this been implemented yet?
- dustingetz 10y agoI am implementing it (search for Hypercrud) and I know of one group of people separately implementing it (search Posh and Catalysis) I know of no others, if anyone reading this is working on this and would like to share ideas please email me