Sprint Planner Helper – Session 13

After some consideration I have decided to follow the ASP.NET MVC best practices quite closely – and do the listing of the products as a separate page, the Index-method on the Product Controller. I’ll focus on this before the actual adding is fleshed out. This is because the Create-method of the ProductController do a redirect to the Index-action. Also I will keep the GUI very simple. If I do the MVC-ing right it will be easy for anyone who knows this. [Wait one hour – Marcus is coding :)] I actually got a product added today! And the more I work with TDD, DDD and ASP.NET MVC the more right it feels. Read this and you’ll see what I mean. I will have to create a factory for products… but my hour is up.
Read More

Why DDD rocks – the marcusoft.net version

Today I had very interesting conversation with a colleague and friend. He is very accomplished in matters concerning Application Lifecycle Management (ALM). And the more we talked about that and the things I am learning with the Sprint Planner Helper (TDD, DDD and ASP.NET MVC) I got sure of that I am on the right track. It’s the way to go – especially if you want to be agile. Just take my experience with this project. I have now coded for some time (ca 15 hours) without having to lock down to a database-design and data access strategy. Not even near – I am working out the model. I am even planning to do the database-stuff at the very end. You could choose to view the data access strategy and database as a “necessary evil”. I know I will need one to persist my data – but I will do...
Read More

Abbe in the pulka-slopes

Winter has “struck” Stockholm and we have lots of snow. And knowing the Stockholm weather we expect most of it to be gone in a few days. So we hurried out and bought Abbe his first pulka (kind of small sledge) and went to the slopes of Kronobergsparken. We thought that it was loads of fun. Elin and Abbe swished down the slopes. I got a few runs myself (for my self also ;) and the memories all came back. Running up the slope with the pulka in a string behind you. Getting cold after the first run… Ahhh the memories. Apparently Abbe was not as amused as we were.
Read More

Sprint Planner Helper – Session 12

Today I started off with some refactoring of the things I did yesterday. It was some pretty ugly code in the aspx-page which now is improved with some properties in the domain model. I also started the actual adding functionality of the Product and the product backlog. This immediately got me into trouble since I need a list of product owners in order to fill out the form… More test data and repositories. TDD is great – but it doesn’t solve the problem with testdata. It’s hard work – even with the great repository pattern. I hope (and guess) that this pays off. Since I am alone and Abbe is sound asleep I’ll break the 1 hour rule and continue a bit further. There are some great help in the way that ASP.NET MVC integrates into Visual Studio 2008. Most notably the way you can generate typed views (for list,...
Read More

Prayer works – Jesus hears them

I have this last week got two very real answers to my and other peoples prayers. I am still amazed that I still become amazed that prayers are answered. But that is how it is – it works. So if you ever find yourself in peril just put your hands together and whisper “Jesus – help me now!”. He will hear you!
Read More

Sprint Planner Helper – Session 11

It’s been a while since I did some code on the project. Abbe has been quite sickly and I have not had the time. No worries – it’s all a hobby ;) OK – what I have done since last time (2 x 15 min I think) is to produce a list of Product on my web page. With this fancy layout… That made me realize that I could have added some disclaimer when it comes to the UI. I made a certain css-class for the productlist, so someone can help me out later. I will make it functional now – not pretty. I also came to realize that my model may be enhanced with some status for the product items and aggregated values for how much that is done for a product. I TDD’ed them out and added them to the GUI. Which took me forever since I got...
Read More

Get Vista to go faster

I know that some people will mock this and say “Uninstall it!” but I am pretty much stuck with my computer (Dell Precision M 70) and my installation of Vista. Here is some suggestions and by only doing the first point I got it up to a working condition in no time! It’s now much uglier but workable – I’ll take that anyday.
Read More

DDD – the coin drops for Marcus

I have now tried to grasp the DDD-concept without fully “getting it”. I must confess that I have thought: “What is the deal with this… I have done it before”. But today we had a most prominent guest at Elevate (the education initiative at Avega) – Jimmy Nilsson.  And what he said got the coin to drop for me. The heading of his presentation was something like “A new era for data access”. And the things he said that got me to understand was something like this – not a quote but rather his reasoning: Traditionally we focus on the database design in application development. So very early we want to get the database design in place. “We need it to start to do code”. Since we did that design early in the process we often got it wrong and inherited those error through the process. And we are reluctant...
Read More

Simple but useful generic repository pattern

I have pointed here several times before – but it’s so nice. It’s an implementation of the Repository Pattern using generics, that will minimize your code in a very nice way. I am sure that the FindAll can be refined into something very nice with LINQ, that allows you to send a specification criteria or so. Here is my implementation that uses a common interface (IBaseEntity) for all my entities. It basically has an ID, so that the abstract implementation can use it as a key: namespace Marcusoft.SprintPlannerHelper.Repositories { /// <summary> /// A generic repository interface that dictates all the methods that a repository should map to /// </summary> /// <typeparam name=”T”>the type of the interface</typeparam> public interface IRepository<T>  where T :IBaseEntity { T GetById(Guid id); IList<T> FindAll(); void Add(T entity); void Remove(T entity); } }   public abstract class Repository<T> : IRepository<T> where T : IBaseEntity { protected readonly...
Read More

Sprint Planner Helper – Session 10

You could call the last session my first “sprint demo”. What happened was that I for the first time could see where this was going. And I (as Product Owner) was not happy… I couldn’t even yell at the team (also me) because it was quite a lousy order. OK –what was wrong. Firstly – I was not happy about that certain actions was only avaiable to certain roles (“As Product Owner”, “As Scrum master”). I want the Sprint Planner Helper to be open and useful without hindering you with role checking. Then I was way to detailed in my model. Why do I even bother with the ProductOwnerController. It’s just an attribute on the ProductBacklog, as is the product by the way. So I sat down in a meeting with the team, designer and the domain experts (in this case me on all three accounts :)) and did some...
Read More