I’ve been studying alternative data access methodologies for dashCommerce as I’m not pleased with SubSonic. I’ve been looking at some alternatives and in my searching I came across LightSpeed. LightSpeed has some really nice features such as the LightSpeedContext and the UnitOfWork which encapsulate some very nice features. The model designer of LightSpeed is very nice as well – especially the round-tripping. With a new design I can see how the designer would be a very nice tool. It’s a very nice and well thought out framework. But what really struck me wasn’t necessarily the code or the model (which are really good – did I say that yet?
) – what struck me was the speed with which Mindscape incorporates feedback from the community. As I was evaluating the technology, I asked a few questions in the forums and submitted a few suggestions about their command line generator (lsgen). They asked a few clarifying questions in return and BOOM – “We’ve added support for FEATURE X . . . it will be in the nightly builds . . . located here . . .” That took < 8 hours.
Now, LightSpeed is a commercial product – it’s not open source. But what Mindscape has done is really quite impressive. To evaluate, accept, and incorporate feedback that quickly into the product and to have the installer ready that afternoon is impressive – for anyone. And to me, it immediately struck me that this type of setup does a pretty good job at neutralizing the open source model. Now, I’m sure that’s not their intent – they just want to put out a great product and make some money doing it. But when I saw how quickly they turned it around – well, it got me thinking.
I’m still evaluating some different technologies, but my experience with Mindscape got me thinking about how to do software right – because those people are doing things as right as I’ve seen.
August 17, 2008 at 10:56 pm
This may be a topic for another post, but why aren’t you happy with Subsonic?
August 18, 2008 at 2:37 am
lightspeed has a very nice feature set on the trunk too. I have been looking at ways of doing persistence ignorance without having to climb mount nhibernate. Db4o is a pretty compelling alternative to orm with it’s transparent persistence and Linq support.
August 18, 2008 at 2:40 am
what would be interesting is comparison between Lightspeed and NHibernate 2.0 CR2…
the first one is lightweight, very (very) simple with nice features (validators) and has already working LINQ provider as a query language (can’t beat that)…
but I need to find a 1 serious project that is using lightspeed, or arguments to “sell” it to companies working for…their forum is composed of very few posts…
imo they need to invest to marketing and do a big (really big) comparison between their OR/M and competition…with advantages they bring
———–
the 2nd one is much (much) mature product with great name recognition, big community and even bigger usage…linq provider is comming hopefully in 2.1
but despite what ppl think NHibernate is not that lightweight, and is more complicated to setup and use, and mostly LEARN!…
imo in DDD these 2 are the biggest competitors I would look at, I was doing my research aswell and they were 2 that left…
for me (personal oppinion) LLBLGEN falls out of comparison, aswell as subsonic and LINQ to SQL…they all lack some things (mostly MS solution) or are doing too too much (LLBBGENLBL what was that?;)
August 18, 2008 at 3:15 am
Regarding Subsonic.
This is the first of your posts that I’ve read so sorry if you’ve covered this elsewhere but I was wondering what it is you don’t like about Subsonic?
Just glancing through your blog I spotted a reference to Subsonic and tight coupling. I’ve recently adapted the technique described here to get around that issue.
Generally I’ve found Subsonic (especially the latest version) a joy to use with queries like…
DB.Select.From.ExecuteTypedList
using Subsonic’s strongly typed access to the database but pulling the data into my own model to do what I please with it.
August 18, 2008 at 3:17 am
Sorry link didn’t seem to work.
The “here” I referred to is the post titled
Writing Decoupled, Testable Code With SubSonic 2.1 on subsonicproject.com
http://subsonicproject.com/2-1-pakala/subsonic-writing-decoupled-testable-code-with-subsonic-2-1/
August 18, 2008 at 5:30 am
Can you tell us exactly what the problems are that you are having with Subsonic? I’ve searched the forums and your blogs and I think I have an idea.
But it would be cool if you summed up the problems in your blogs.
Thanks!
Mansour
August 18, 2008 at 7:59 am
What do you find wrong with SubSonic? I just finsihed watching the intro videos and it looks very promising to me. Can you give me some more details about your experience with SubSonic? Thanks.
Justin.
August 18, 2008 at 8:07 am
Don’t know if you noticed this or not, but cowgaR left a comment on DotNetKicks that his comment was deleted.
August 18, 2008 at 9:05 am
No. I don’t think so. It’s great that they had a quick turnaround time, but that probably indicates that they have developers with less-than-full work loads. They have personnel scouring forums or reading email the second that it comes in. They make develop up some new requirements that may or may not have fit into the long term goals for the software, then hand those requirements to the developer who is being paid to sit and wait for new requirements, who in term develops them and commits the new code. The continuous integration server generates the nightly build.
Is this process sustainable as they gain more and more users and more requests? No. And are they thinking about the long term goals of the software or are they appeasing a current user?
I run a project, Architecture Rules. I have only a few users, so I want to keep them happy. I recently had one user ask to add some code that would really have been the opposite of what I was looking for the project to do. If I appeased him, the project would be confusing to new users, would make the code more confusing, and overall just not be good for the project – but it would have landed a new active user in my small community. It’s not worth it though. I hope these guys didn’t trade one new user today for hundreds of users down the road.
Hey. I’m going to have to turn this into a blog post or something.
August 18, 2008 at 7:44 pm
@Luke – I’ll be happy to detail my concerns, but I’ll do it in a later post. This post was not about SubSonic – but about what a nice job the folks at Mindscape are doing.
@MrTea – I am glad you found that article useful as Rob pulled the key to that solution (DI/IoC) off the dashCommerce forums where I posted it.
@Mike – I don’t disagree with anything that you said – all I would add is that feature requests cover a wide spectrum and I think if you look at the LightSpeed framework – I don’t think you’ll find it sloppy or catering to the whims of forum members. This could not be achieved with all feature requests, but for ones that make sense, I think the value add is significant and does wonders for customer satisfaction.
@cowgaR – I will probably be taking a fresh look at NHibernate as well. I looked at it back in 2005 and it was a little rough around the edges to me, but I’ll have to re-evaluate it and see how the experience is. Whatever I find, if I think it will be useful, I’ll post it up here.
August 19, 2008 at 11:20 am
“I am glad you found that article useful as Rob pulled the key to that solution (DI/IoC) off the dashCommerce forums where I posted it”
Well I think DI/IoC is a pretty mature pattern/practice. I don’t think anyone can claim intellectual copyright on it
But the point stands, I have used Subsonic in a losely coupled way in several projects and it hasn’t missed a beat for me.
August 19, 2008 at 1:03 pm
Take a look at the backgroundmotion source.
http://www.codeplex.com/backgroundmotion
It was written by the Mindscape guys, and it has an interesting data access pattern using IUnitofWork and Repository patterns. It may be a related concept to lightspeed.
August 19, 2008 at 1:28 pm
I have never had problems with SubSonic and I’ve used it on some MASSIVE applications. What seems to be giving you grief with it? Perhaps the community of users can help?
August 19, 2008 at 5:02 pm
@Steve Sheldon – Thanks a lot – that’s awesome!
@MrTea – I understand. It just rubbed me the wrong way (his post).
August 28, 2008 at 5:41 pm
Try EntitySpaces (www.entityspaces.net) its very good.
October 1, 2008 at 1:54 am
I think (as others have said), the main focus should not be on “what ORM we should use?”.
The first priority is to get the data manipulation out of the presentation tier. On top of this, it is also important to have a loosely coupled layer of abstraction.
So what ORM’s support this easily and also have great features?
My opinion. These great ORM frameworks are simply awesome when your building quick projects that no one other than yourself will extend, but when you get to the point where millions of others will be using your could, you want to keep them in mind.
I think we should place all the data manipulation in one place, maybe an implementation of an interface. That way, when I call the method, I don’t care what ORM or method is used to get the data. Now, if users want to switch ORM’s, they that ability without breaking the application (unit tests would be nice though).
October 27, 2008 at 7:56 pm
@Paul Knopf
For this, it’s kinda weird… why would you build the ability to use several different OR/Ms? Your abstracting on abstractions already… well, I guess that isn’t necessarily a bad thing – but I guess the question would be why? You are removing the point of what OR/Ms are anyway. A quick way to generate concrete classes from the relational database world. Then you’re going to add another container class that talks to that concrete class?
Doesn’t make sense to me. Overly complicated and unnecessary. If you want to really do what you are talking about then you may want to take a look at db4o.com
Also, if you like using “dumb” containers, subsonicproject.com does make use of “Repository” methods as opposed to ActiveRecord. Very versatile product. There is a reason M$ is funding the project (although maybe not directly…)
October 27, 2008 at 7:58 pm
Forgot to mention… if other OR/Ms used the repository method, it just may be possible to use pluggable OR/Ms as well. Interesting concept. Subsonic is the only one that I know of that gives the ability to choose between the two styles of data access. Of course, that doesn’t meant that others don’t.