CRUD against an SQL database is not imo the sweet spot for Clojure, at 
least not if you're comparing it against things like Rails or Django. With 
most of the NoSql stores out there, there's a Clojure client that let's you 
basically say, "Here's a map, upsert it," which is essentially what you can 
say with Rails, Django, etc. (just replace map with class). So for the 
first 80% of cases of db access you long for that effortlessness you had 
with your ORM, but once you get a bit further down the line you don't get 
stuck in the muck of Vietnam on the last 20%.   


On Tuesday, December 3, 2013 3:26:53 PM UTC-8, James Laver wrote:
>
> Hi all,
>
> I'm fairly new to clojure (a few months), but not new to lisp or indeed 
> functional languages in general and I have around 10 years of experience 
> programming dynamic languages in general.
>
> I've recently been using luminus to build a RESTful web API and I've been 
> honestly surprised by how much code I've had to write to enable me to 
> actually get things done while using it. I can't say I was expecting 
> something full-stack like Django or Rails, but I wasn't expecting to have 
> to write quite so much code to get simple things done. I've now spent 
> around 14 hours building a RESTful web service that handles CRUD for a 
> single database table because I've had to solve so many things I've come up 
> against.
>
> What I'm actually wondering here is what I'm missing. Is it that the 
> entire clojurian approach is "here are the pieces, build a framework from 
> them" or is it just that I've had terrible luck with libraries?
>
> Some examples:
> 1. The :params key is used by ring.middleware.params, compojure and 
> ring.middleware.format so it's impossible to know where a given param is 
> coming from
> 2. ring.middleware.params does not provide a convenience map that merges 
> :query-params and :form-params, despite being happy to stuff everything 
> into :params. At least ring.middleware.format adds :body-params here. I've 
> now written a middleware to do this.
> 3. ring.middleware.keyword-params only keywordises the :params map, not 
> the other maps. There is no configurable behaviour to ask it to do other 
> maps. I've now written a middleware for this
> 4. migratus seems to have the smallest note ever in the documentation 
> informing you that version numbers must be 14 digits long (i was using 12 
> digits for a timestamp by not having the seconds listed). This seems like a 
> really daft requirement in the first place.
> 5. every migrations library i've seen that doesn't work off raw SQL files 
> is incapable of representing advanced features of my database of choice 
> (postgresql)
> 6. lobos requires varchars to have a length limit applied (postgres does 
> not)
> 7. the best way i've found of dealing with a database is korma. While 
> korma does reduce some of the pain of SQL for standard things, it has 
> limits and it doesn't save all that much pain.
>
> etc.
>
> So, am I missing something? Are there any libraries people can recommend 
> that will make my life easier? Am I just looking at this in completely the 
> wrong way?
>
> Thanks,
> James
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to