.netTiers is not free. It used to be free, but then Eric J. Smith changed his pricing model and yanked the free version out from under the community that made codesmith a booming product.
In my opinion, codesmith had the perfect model. There was a free part, the generator, that everyone could use. You could build templates on your own, and use the generator, and everyone was excited. Then, there was a paid for add on that was the ide that would allow you to build templates much easier. Perfect. You have a free part, that help build a community, and you had a pay part, that could be a revenue stream.
Then, after the community was established, and lots of people began seeing how powerful the tool could be, they all started pitching in templates and contributing to the community. And, then, the free part of the app was taken away. Kind of an underhanded move, in my opinon. And, thats just my opinion. If it was never free, nobody would have even bothered with codesmith. Nobody would have contributed to the community which actually made that product, and .nettiers wouldnt be what it is today. You wouldnt see marketing posts like this (how many times does it say .nettiers is free?), and you definitely wouldnt see things like "Join the CodeSmith revolution" on the codesmith home page. Can I understand why the move was made? Sure, for the money. Do I think it was underhanded? Absolutely.
Back on topic... As for a comparison of subsonic and .nettiers (which the title of this thread made me think was in here), here are some of my impressions. Please keep in mind that these tests were using timers and were on my workstation with the webserver and sqlserver running locally. If you dont agree with these results, or question the integrity, feel free to run your own tests.
- For raw queries (select column1, column2, columnN from table), nettiers seems to be faster than subsonic by an average of 8/1000ths of a second for my tests, which basically consisted of getting all the rows out of the products table in northwind.
- Subsonic has dynamic queries on the client, where nettiers uses the same generic code for top, paged, and whatever other dynamic stuff it needs to do (order by and special where clauses). The subsonic queries are more specific to the task, and are generally faster than the same query on .nettiers, again, we are talking in the 1000ths of seconds in my not-so-scientific tests.
- Subsonic can only do paging on sql2005, where nettiers can do it anywhere. Hopefully, that wont always be the case.
-
Nettiers generates 5.82 MB in 457 files in 34 folders for northwind. Enterprise library and all its terrabytes of references in your bin folder.
-
Subsonic generates 272 KB in 30 files in 1 folder for northwind. SubSonic.dll in your bin folder.
-
web.config changes: A couple of unintrusive lines for subsonic, and, well, weve all seen the entlib web.config changes. Even if the entlib stuff is in an external file, there are still more changes in the web.config than subsonic.
-
.nettiers is far more mature than subsonic. Its configuration over convention attitude makes for a much more solid generation base. I mean, it supports multi-column primary keys, better guid support, associative table queries, a domain model or service layer, and has way more eyes looking at it getting bugs identified and fixed.
-
subsonic is free. .nettiers templates are free, but the template processor is not free. Its like saying Microsoft Word documents are free, but Microsoft Word is not.
-
nettiers service layer is great. subsonic probably wont ever do this because that doesnt seem to be the scope of the product.
-
deep load/deep save are implemented much better in .nettiers.
-
rules and validation features baked in to .nettiers seem to be cool, but I havent used them enough to speak to them.
-
.nettiers overall architecture is superb.
-
.nettiers is huge. Its output is huge and its a lot to wade through, should you ever want to dig into some of the entity objects.
-
.nettiers is not as flexible as subsonic. It is very easy to get a count of items in a database with subsonic, and its kind of indirect on how you do it with .nettiers.
-
subsonic is better for database independence. I know the entlib was supposed to do this for us, and it does in many cases. Its just easier to do in subsonic.