w00t : Building a new app from the ground up : methodology, technology & tools used
This is one of the articles in our series; the parts are:
- Methodology, technology & tools used
- Setting up the environment
- First specs and getting started
- IOC, database and other stuff; a real framework
Happy reading !
Introduction
Since I have always been very interested in the latest technology developments, and I needed to start a new and initially very simple project, I decided to do some studying and opt for new things...
After reading quite some articles, I decided to write about my experiences in my blog, in order to learn some things about my experiences, and even help you decide on some aspects...
If you disagree in any way with my opinions, or have some interesting suggestions please comment, since I am always eager to know about the opinion of somebody else.
Methodology : the paradigm shift
Since my programming in TRS-80-basic as a 7-year old, a lot has changed... This is an overview of my personal evolution :
Procedural programming
Initially I got started with BASIC, since it was the most understandable development platform at the time, very easy to get started with. A few years later, I had been developing in MASM, Turbo Pascal and even C-- in the demoscene (only limited tracks available), all choices that opted my preference for execution speed, before I really entered my next level of programming consciousness...
Object oriented programming
Since I had been a hardcore developer in the demo-scene, most OO-concepts were a stranger to me (speed was king)... It has only been a few years later in my professional carreer that the advantages of OO were becoming obvious to me. Unfortunately, until then I reinvented the wheel for just about each problem I had, since I never heard about the next part..
Design patterns
After hearing about factories, services, command patterns, all kinds of interfaces etc. I decided that that was the next thing for me, so I started studying the GOF design patterns, Martin Fowler's blog and all kinds of reference material that I could find. Slowy some of the more interesting concepts were getting to me, but in the meantime there was a new buzz on the development scene...
Unit testing
What's that ? Testing your code by programming tests as well ? Although I read a lot about this subject, it never seemed to be able to convince me, since i was more of a fan of the higher level automated testing, aka
Functional/acceptance testing
I allready used this from the beginning on, I wrote programs that did some kind of black box testing, before tools like Fitnesse were available by means of simple input/output. This seemed more usefull then writing unit tests. Until now : the next buzz
Behavior driven development
Finally something that replaces the ubiqutous unit tests with a more interesting approach, write in "business language" what a program has to do, and implement that in code afterwards.. Since I am quite new to this I expect that I will have some problems on the go, so I will share them with all of u in the future..
Technology
Regarding the technology : my choice is quite simply based on my experience :
Development platform : ASP.Net MVC / C#
2 very simple reasons : It needed to be web-based, and I have had lots of experience with this platform since the early betas. (The design of ASP.NET MVC also encourages seperation of concerns.)
DB/ORM : Subsonic SimpleRepository
On the database part I am not quite sure yet, but I think a good ORM should not make me obliged to keep using the same DB after all, so I think I will use SqlLite initially, but switch later on to a better one. Strict POCO is not a necessity for me
Since I have no interest whatsoever on the db part, I think i have to choose between 2 options :
- FluentNHibernate
- SubSonic SimpleRepository
While I have been using FluentNhibernate in the past, I have a gut/good feeling about Subsonic SimpleRepository, so I will initially probably start with the second one. Since I wil be using an interface anyway I should be able to switch between two versions quite quick.
IOC container : Castle Windsor
Since I have no idea about an IOC container, I will probably use the one I have the most experience with : Castle Windsor.
BDD : MSpec
Because I am new to this mather,I will choose the one that got me interested in this : MSpec.
Tools
There is only a very limited list of extra tools I need :
IDE
For the programming/web design : Visual studio. For the initial SqlLite management I will use SqlLiteAdmin.
Source control
No doubt about this : GIT .
Because of :
- Atomic commits
- Ease to setup
- Ease to do branching/merging/pulling other sources etc
You can read more about this in my other blog article.
Timetracker
Even though this is not a project that I can bill by the hour, I like to keep track of the hours I invested in this. Here I simply use google calendar, as I do for all my customers. I even wrote an article about this here.
Summary
Those are the inital choicesI have made. I will now setup my development environment and I'll keep you all posted on my blog (articles with tag w00t ).