My One-on-One .Net Training Day
On Monday, as LotusSphere 2010 got under way and lots of you waited eagerly(?) to see what's new with Domino, I on the other hand spent the whole day immersed in .Net development. Read in to that what you will, but the timing is purely coincidental.
Karen's friend's husband, Mitul, who also runs his own web development in Nottingham, came and spent the whole day walking me through developing a web application in Visual Studio.
We decided to start from scratch and build a blog template. First off we created some SQL tables. We then created some CRUD-based Stored Procedures for accessing the tables, before adding some Table Adapters to access the procedures from our code.
With the "data layer" in place we then created some custom classes to represent the data. The main class we worked on was called BlogItem and had properties such as Title, Content and Author. It also had methods, such as Save(), which would commit changes back SQL.
This was all very new to me and I immediately saw the benefits of the approach. Most of my (traditional) web development experience (outside of Notes/Domino) has been LAMP-based. In PHP I'm used to just building a SQL string within the PHP, executing the query and then using a For() to loop all the results. Using a data layer to abstract away from this approach has obvious benefits.
Starting with a Master.Template file we then built the foundation of all our pages and before long we had a web page which listed a set of blog entries, on which you could click to read each one -- both pages having common header/footers etc.
Taking it further we went on to add a class called User and added a login form to the application, which was based on a custom control element. This control included an Authenticate method which added an object, based on the User class, in to the user's session variables. At any point we can then refer to this User object and its methods such as User.hasRole("Admin") to handle the role-based security.
There were a couple of other bits we covered, such as how to output just XML, but I think we did quite a bit and covered everything I wanted to, considering we only had 8 hours in which to do it.
Although the end product isn't anywhere near a complete blog template, what it is is a good starting point for me to take it further and learn at my own pace. Now I'm over the first hurdle I'll find it much easier to continue developing.
While paying somebody to teach me a new technology isn't something I've done before or really wanted to do, it was definitely worth it. Instead of trying to find an hour here and there to learn, which was never going to work, having somebody with me for a day forced me to spend the whole day learning, which is always the best way to go.
Most importantly, what I came away with is a desire to learn more. I liked what I saw and look forward to working on the potential projects I have coming up, which might suit .Net better than they would Domino.
Good on yer lad! I have been thinking for sometime now that we need to be more 'Developers' and less 'Dominoes'; the skills we learn through our domino development are transferable to any language or system, it's just the class names that change! Looking forward to hearing how you get on.
Reply
Whether things we've learnt from working with Domino should ever be transferred elsewhere is a matter for debate.
On Monday I found myself half asking "How would I do.." and then stopping the question and just saying "Forget it, I should probably forget I ever did that".
A good example is the ?Open/?Edit idea of using the same form to view/edit content.
Once we'd got a page to show a blog entry I asked Mitul "How would you go about editing it then? Just stick &edit on the end of the URL?". He looked at my like I was a bit nuts, as would most people not used to working with Domino. In other systems it's more normal to keep the admin/CMS part complete separate to what the user sees.
Obviously there's lots of what I've learnt with Domino that is transferable, but there's just as much that could be considered bad habits and should be forgotten.
Jake
Reply
Jake,
while many companies state that people are there greatest assets (which does not coincide whith the amount they pay to them) I really believe that you will be a very good developer. That has nothing to do with your knowledge of a special product but with the way you do things. Therefore it is a pleasure for me to read how you are getting done with LAMP, .NET, Flex, Java etc.
But the one reason why I read your blog and not one of the million others is that you can write about your findings in an interesting way.
I liked very much the MS Enterprise Library for .NET which will give you a kickstart in creating .NET web apps. But maybe it is better to do more things by yourself in order to have greater influence on the result?
Anyway, I will eagerly wait on your next .NET blog...
Mark
Reply
Thanks Mark. I love a bit of flattery.
Reply
Having a "coach" is a really good approach I think, as you can go at your own pace and get the information you want. I think you learned in one day what took me a week to cover by myself!!!
The Enterprise Library is something that is widely used in enterprises and it has some neat code: data access, logging, and so on. You can download a DVD image of the April 2007 version on the Microsoft download site, and update the library to the latest version (4.1) while keeping all the information from the DVD.
Byt he way, what approach did you use for the data layer? There are many ways (LINQ to SQL, LINQ to Objects, ADO, the enterprise library data access building block) and I'm not quite sure yet what approach is the best (I guess it depends on the project). What did your "coach" say on that?
And although I'm into .Net almost full time now, I can't help looking at PlanetLotus to see what is going at the Sphere... Can't get rid of 13 years of Notes like that!
Thanks for the update and keep up the good blogging
Reply
We didn't use LINQ. Not sure what the name of what we did use was.
Reply
I've also decided to learn more about the Microsoft development environment. Have been to a couple of short courses during the last four or five years, found the tools impressive. Will be trying to learn more by myself, when time permits, and recently subscribed to one year of one-way [non-interactive] online courses for only US $99 (only until 31 January) at http://www.learndevnow.com/ ----- and I see that they've reduced that right down to US $49.99 until just until tomorrow 21 January 2010 ----- which isn't bad value for money at all for wide range of MS development courses.
Ah, all the languages that I've learned (and forgotten) over the last 40 years, this will be just one more set of notches on the handle of the gun ...
Reply
Sounds good, Jake. Abstraction is something I've been trying to teach Domino developers for about 5 years and it seems like it never sinks in till there is some other system that forces them to do it that way. I think I've said in the past that it's a bit like growing up -- getting rid of all the conveniences of Domino makes us work and think a bit more for ourselves but the experience in learning is transformational and so worth it.
I'm looking forward to reading about your adventure with .NET! Go get 'em!
Reply
In my thirty-something year career as an engineer I have designed hardware and software using many tools. For a long time I searched for the magic bullet software system that would let me create database-backed applications with ease and grace.
Before the Internet ... even before Windows ... I tried dBase, FoxPro, Clarion, Framework, DataFlex and others with varying degrees of success. At some point my quest faded into the background.
When the Internet hit me between the eyes I'd taken a job that forced me to use Lotus Notes. Oh how I hated Notes. Well, to make a long story short (too late?) Notes evolved into Notes/Domino and I evolved into writing software for the web.
At some point I realized that Notes/Domino WAS the silver bullet I had been seeking earlier in my career. I realized that I can do anything in Notes/Domino that I can do with any other system. And, as a single vendor solution, it's well integrated from top to bottom. If you do things the Notes-way, everything is very easy. But, if you want to do things just the way you want, Notes/Domino doesn't stop you.
A good example is your blog. Yes, the Notes-way is to add "?EditDocument" on the end of the URL and you edit using the same form that displayed the data. But there's no reason you can't create a different form and let a QuerySave agent process the data and update the document item values on any document in the database.
In any other system like .Net, you're going to have to write that code anyway so the QuerySave agent is the same to me. Now with XPages there are other options as well. (Don't ask me what they are quite yet. I don't grok XPages yet ... but I will.)
I have found the Notes/Domino system to be the easiest system for the kind of systems I generally create. It's also the easiest system to let me administer and modify a production system without disturbing the users.
The other attribute of Notes/Domino I love is the most granular and automatable security model I've seen bar none. I use reader fields and author fields in most every design and I automate the update of these fields, group creation and maintenance and the updating of the ACL.
The system I think comes closest to matching Notes/Domino for the kind of systems I create is Plone.
I'm not saying you shouldn't explore other alternatives. Heck, I spend most of my days writing Perl 5 and Ruby in my current non-web work. I'm just saying that, in the end, you may come to appreciate Notes/Domino even more.
Relational data bases are great but changing the schema and then migrating the data, at least when I was doing that, was painful. This means you've got to do a better job of designing up front to avoid the pain. If you have to change the schema on a production system you will likely have to shut the system down. In Notes I change make those kind of change all the time and the users are not affected ... if I do it right.
Well, this has gotten way too long. I guess I should have tweeted it instead.
Reply
Just curious, as I am very actively contemplating your idea of a one-one one session with a .Net developer:
1. How did you arrive at a "syllabus" for your session?
2. Are you using MVC or webforms?
3. Did you configure a server or do all the development on a workstation?
4. Did you cover ActiveDirectory integration?
Thanks
Reply
1. Just made it up as we went along but with a rough idea of what we needed to cover and with a few things I knew I wanted to cover (roles and XML output).
2. Not MVC.
3. Apparently (unlike Domino) it's just not the done thing to develop on a server directly. So we worked on my laptop and then setup a Windows server for deployment and covered how to do that.
4. No.
Reply
Good luck jake it is interesting to read your experience with .net. Apps do seem to take longer to develop than domino or at least there is extra work upfront during relational db design, although the extra stability is worth it. Re: whether use same or different form for read, edit, new mode is a design decision based on content and the type of controls used on the forms. I have used different forms before just to simplify design and reduce amount of codebehind for a single form for readability.
Reply
Jake, have you considered publishing a more detailed step by step write-up? I know it would be a lot of work, so maybe charging to access it?
Reply
Hi Mark. Hadn't thought about it really.
Most of what I do on here takes a lot of work (can't you tell ;-), but it doesn't mean I'm going to charge for access. The whole site would be pay-per-view on that basis.
I don't feel confident enough yet that my current approach to ASP.NET is what I should be teaching others. For now I'll stick with sharing the odd bit of knowledge here and there as I go.
If you want ASP.NET training you don't need to look far to find it. Start at www.asp.net
Reply
Show the rest of this thread