Simplified Feature Branching - Source control done right

by Tom 1. December 2012 06:10

Introduction

As one does typically develop features in parallel, and some features can not be released while others can, a lot of software teams seem to have problems with their source control.

In this post I will describe Simplified Feature Branching usable with git or any other DVCS.

This model is not rocket science, and is a further simplification of Adam Dymitruk's post on feature branching.

It assumes you use proper release cycles and versioning during the software development lifecycle.

Whenever I mention "feature" in this post, I actually mean "feature" or "bugfix", but I am a lazy b*d.

The main idea: simplification

Make everything as simple as possible, but not simpler - Albert Einstein

Whenever things start to get complicated, we should attempt to simplify them by breaking it up into smaller parts. This is exactly what Simplified Feature Branching does. We make the distinction between branching and integration.

More...

Winning the game with CQRS/event sourcing and BDD

by Tom 1. September 2010 15:59

Yes !! I did it !!!

I have been making a few attempts to combine BDD with CQRS/event sourcing, since they seem to make a perfect fit.

After mailing to the DDD/CQRS newsgroup for a few times, I finally managed to make something presentable... this is the BDD part for the domain :

And this is the resulting output after running the console runner

More...

Getting started quickly with BDD in .Net

by Tom 11. August 2010 07:35

Introduction

This article will give you a brief introduction on how to get started with BDD (Behaviour driven development). It is my second attempt for such an article.

I will show you the complete workflow on how to write an app using BDD in .Net.

Background

Small note: if you want to know why you should use BDD, I would like to refer you to another one of my articles: The advantage of using BDD over TDD

Today I finally managed to upgrade my Aubergine BDD framework to v0.1.

This is now starting to get really usable (I've been dogfooding it for a while now).

This release contains the following changes:

  • Very basic support for NUnit
  • Build script using JeremySkinner's Phantom build engine
  • Properly named namespaces/dll's (i.e. no more Be.Corebvba.*)

In this spirit I decided to write a small tutorial on how to do BDD development in .Net, so maybe some people might find some use for this !!

More...

Override interface mappings and creata a generic entity version filter

by Tom 20. April 2010 15:02

Introduction

For one of my customers I needed to have some kind of versioning for a whole bunch of entities on my database. Since I use my very own MvcExtensions framework, I wanted to include a functionality which would automatically filter all entities based on this interface :


    public interface IVersionAware
    {
        string Version { get; set; }
    }

In short, I only want to get the entities of the current version through my repository. This interface would then automaticly imply that all data could be filtered by setting a version filter.

I took me quite some time, but spending a weekend at the Dutch coast cleared my mind a bit, and after the weekend I managed to get it working...

The void (tm)

More...

Build asp.net MVC applications FAST with MVCExtensions v0.4

by Tom 20. January 2010 19:28

Introduction

Today I finished v0.4 of my MVCExtensions library and I pushed the sourcecode to github.

I also included a very simple tasklist, in order to show you on how to get started using this library. You can also see (slightly outdated) example code in this blog post...

You can see a demo of the tasklist app running here. (Try entering a task without a name, or with a name that has more then 256 chars to see the custom strings in action).

You can download the full sourcecode here.

Update

I now made a screencast as well. it is available here.

More...

Teaser on my upcoming mvcextensions project release

by Tom 18. January 2010 15:51

Hi there,

I am going to give you a quick teaser on how to setup a full asp.net mvc application with database & all the rest using my soon-to-be-updated MVCExtensions library.

More...

2009 retrospective: .Net technologies and lessons learned

by Tom 2. January 2010 03:02

my pride & joy

Introduction

 

In December 2008 I was doing my job as a freelance technical analyst for a big company. While it was a very interesting job in several ways, I felt that a burn-out was coming up. I had no idea whether this was due to the job, or due to my personal merits ( a newborn and a one-year old son, lots of tasks and chores on my to-do list for our house, a busy social life, ...) Instead of waiting for the man with the hammer, I decided to be proactive about it, so I decided to quit the job and reinvent myself during 2009.

It has been both an interesting, very challenging and enriching year for me, with both high peaks and low valleys.

I decided to write this blog post in order to evaluate myself, and I am hoping that other people might find some inspiration in this as well.

 

 

 

 

 

More...

M-V-VM in Asp.Net MVC : removing dependencies between asp.Net views and controller actions

by Tom 30. November 2009 06:32

Since the early days I have always been a fan of the ASP.net MVC framework, although I had one really big issue with it : the coupling of the controller actions in the view pages. This part was a real annoyance, since all the flow and logic was included in the controller, and none of it in the views, _except_ the action flow; this was included in the views by using Html.ActionLink.

This has always been a nuisance for me, so last week, as I was working on a project, I decided to fix this issue...

IMHO the possible proceeding controller actions in the program flow should be defined in the controller action, and not in the view. So how could we do this, while still making it maintainable and easy to follow ?

After considering a few alternative routes, and thinking about it event more, it suddenly hit me; why not represent the possible routes as data.

A few development cycles later I had the following code in the controller:


public ActionResult Index()
{
     ViewData.Model = new VMIndex()
     {
         AllTasks = rTask.Find.OrderBy(o => o.Name),
         AL_AddTask = this.ActionLink("Add new task",c=>c.AddNewTask(null,null))
     };
     return View();
}

And this code in the view :


<h1>Task list</h1>
<%= Html.Grid(Model.AllTasks)
        .Columns(c=> {
            c.For(t => t.Name);
            c.For(t => t.Description);
            c.For(t => Html.ActionLink(t.AL_Status())).Named("Status").DoNotEncode();
            c.For(t => Html.ActionLink(t.AL_Edit())).Named("Edit").DoNotEncode();
            c.For(t => Html.ActionLink(t.AL_Delete())).Named("Delete").DoNotEncode();
        }).Empty("No tasks yet")
%>
<hr />
<h3>Add a new task</h3>
<% using (Html.BeginForm(Model.AL_AddTask)) { %>
    Name<br />
    <%=Html.TextBox("Name") %><br />
    Description<br />
    <%=Html.TextArea("Description") %><br />
    <%=Html.SubmitButton(Model.AL_AddTask) %><br />
<% }%>

Which looks rather nice in my opinion. Since I do not know whether I am the first person who thinks about this or not, I decided to publish the sourcecode together with an example on github.

The technical implementation is actually quite simple; I implement the Model-View-Viewmodel pattern, which is used in WPF, using a simple wrapper class for the action links (i.e. commands in MVVM). Once I made that link, the rest was childs play.

Next to this I also created some helper extensions, to make the code a little easier on the eyes.

I also think that by using this pattern we should be able to implement a winforms/WPF app using the same controller. Anybody who is willing to send me a git patch of a WPF application using this controller: please do !!!

PS: This also makes the actionlinks testable in an easy way; another responsibility that has been taken away from the view !!!

Bookmark and Share

Aubergine (BDD for .Net) source code available on github

by Tom 20. November 2009 11:01

Hi there....

After a few weeks of working on Aubergine (BDD for .Net) I have decided to release the sourcecode for this tool out in the open.

Please do give me some time as I am quite new to this whole community thing. Hints are welcome !

You can find the source on github : http://github.com/ToJans/Aubergine

And the download here: http://github.com/ToJans/Aubergine/downloads

Enjoy !!!

 

 

Bookmark and Share

Why pick git over any other source control repository ?

by Tom 10. July 2009 02:10

I found a very nice article that names some of the major advantages of Git over any other source control system; it certainly is worth a read :

Why Pick GIT ?

Bookmark and Share

About Tom

     Tom Janssens op LinkedIn    Tom Janssens op twitter   Core bvba RSS

I optimize YOUR software development for business value in a few weeks:

  • Kick-off week:
    We look at the organisational goals, next we determine the scope/budget and find a small project that adds business value pronto.
  • Implementation week(s):
    I implement the small project and familiarize with your products, people, organization culture and processes.
  • Epilogue week:
    We evaluate the small project.
    We evaluate your products, people, organization culture and processes: I pinpoint bottlenecks and improvements.
  • I have a proven track record in doing this.

    If you would like to know more or meet up, just give me a call at
    +32 478 336 376.

    More info about Tom and his company...