The pattern I'm talking about is dicussed here: https://news.ycombinator.com/item?id=2945513
846 karma · joined May 15, 2010
The pattern I'm talking about is dicussed here: https://news.ycombinator.com/item?id=2945513
Made programming fun again. Don't seem to get to use it at client sites as it's too extreme an approach :(
Could this be used for inverse kinematics?
Would this approach work in 3d?
Could you use it for reverse model binding with DOM elements?
I guess that scam works because the cost of a delay is subjective.
If you think this is possible in the wild or not is another matter.
*each nugget of data can be versioned and meaninged independently
There are many people arguing things that aren't REST (e.g. pretty urls, media type based versioning) in the name of REST, and there are also (fewer) people trying to talk about things that are REST (e.g. HATEOAS) in the name of REST. This makes it (understandably) easy to blame REST due to the large amount of confusion.
In fact, I did a Bad Thing in my other comment by pointing out that REST-as-widely-understood isn't REST as all the mature individuals who are interested in REST APIs have taken to referring to them as Hypermedia APIs in order to avoid having to rehash the differences and kick off a flame war. I wouldn't have done it if OP hadn't mentioned HATEOAS.
And what you describe nothing to do with REST, it's to do with overly fine-grained API design, without taking your users into account.
"If the engine of application state (and hence the API) is not being driven by hypertext, then it cannot be RESTful and cannot be a REST API. Period."
If you're doing REST as-in JSON-over-http + a docs page, knock yourself out.
edit: Also see: http://roy.gbiv.com/untangled/2009/it-is-okay-to-use-post
public TResult SomeMethod() where TResult : (string name, int id)
I also think language level support for this would be a killer feature, it turns OOP and the requirement to use polymorphism to guarantee strategy-per-type on it's head.
I've worked on enterprise collaboration software before, and came to the conclusions that the users will favour using the simplest thing for the task in hand (email or excel) no matter what SAAS products they have.
The trick then becomes 1. sell to management and get them to gamble on enforcing it's usage, (maybe by taking away the other tools, extensive training), or 2. have something that works at a grass roots level (e.g. dropbox being used to work around IT constraints) .
I think I may have just restated your post, oops!
I keep wondering if the future for workflow tools might be to unobtrusively monitor user interactions by hooking into the email client, and have an intelligent Clippy-like service which prompts and decorates their tools i.e. prompting to use ContractBeast if a contract is attached to an email (or in fact just doing so), and to display relevant information as and when needed. There was some CRM system extension for gmail years ago which I remember being radically successful.
Could something like that have worked out for you?
*and server in order to provide analysis, archiving etc.
its even worse if you want to be able to rollback.
I absolutely didn't separate command and query - the commands themselves are actions which execute against the domain model, and that domain is used to build responses.
My project is here: [Sourcery](https://github.com/mcintyre321/Sourcery) but I think a more mature project you might like to look into is [OrigioDB](http://origodb.com/).
Another thing that gets tricky is making your application deterministic - any calls to the current time, random number or guid generatiom, or to 3rd party services, have to be recorded and replayable in the correct order for when you reconstruct your application instance. This can get tricky if you refactor your application or change its logic later.
It's worth reading up on Prevalence/MemoryImage, and looking into NEventStore also.
The whole application lives in memory as a single object aggregate, which gets rebuilt on startup. I started off with writing json to the file system, moved into compressing and appending to a log file, and moved into using Azure cloud tables.
It's awesomely fast to respond to requests (15ms), and to add new features, but you do get interesting new problems, e.g. along the way I had to:
- come up with a way of migrating events (as my storage formats changed as I improved my frameworks) - find a good way to do fast full-text-search against in memory objects as I had no SQL or ElasticSearch infrastructure (ended up using Linq against in-memory Lucene RamDirectories) - deal with concurrency issues in a fairly novel manner(as all users are acting against a single in-memory)
I'm hoping this architecture will start to become more popular - I think we are in need of a framework equivalent to Rails to take it mainstream.