Click here to Skip to main content
15,440,014 members

Dominic Burford - Professional Profile


Follow on Twitter LinkedIn      Blog RSS
I am a professional software engineer and technical architect with over twenty years commercial development experience with a strong focus on the design and development of web and mobile applications.

I have experience of architecting scalable, distributed, high volume web applications that are accessible from multiple devices due to their responsive web design, including architecting enterprise service-oriented solutions. I have also developed enterprise mobile applications using Xamarin and Telerik Platform.

I have extensive experience using .NET, ASP.NET, Windows and Web Services, WCF, SQL Server, LINQ and other Microsoft technologies. I am also familiar with HTML, Bootstrap, Javascript (inc. JQuery and Node.js), CSS, XML, JSON, Apache Cordova, KendoUI and many other web and mobile related technologies.

I am enthusiastic about Continuous Integration, Continuous Delivery and Application Life-cycle Management having configured such environments using CruiseControl.NET, TeamCity and Team Foundation Services. I enjoy working in Agile and Test Driven Development (TDD) environments.

Outside of work I have two beautiful daughters. I am also an avid cyclist who enjoys reading, listening to music and travelling.



Weekly Data. Recent events may not appear immediately. For information on Reputation please see the FAQ.


Members need to achieve at least one of the given member levels in the given reputation categories in order to perform a given action. For example, to store personal files in your account area you will need to achieve Platinum level in either the Author or Authority category. The "If Owner" column means that owners of an item automatically have the privilege. The member types column lists member types who gain the privilege regardless of their reputation level.

ActionAuthorAuthorityDebatorEditorEnquirerOrganiserParticipantIf OwnerMember Types
Have no restrictions on voting frequencysilversilversilversilver
Bypass spam checks when posting contentsilversilversilversilversilversilvergoldSubEditor, Mentor, Protector, Editor
Store personal files in your account areaplatinumplatinumSubEditor, Editor
Have live hyperlinks in your profilebronzebronzebronzebronzebronzebronzesilverSubEditor, Protector, Editor
Have the ability to include a biography in your profilebronzebronzebronzebronzebronzebronzesilverSubEditor, Protector, Editor
Edit a Question in Q&AsilversilversilversilverYesSubEditor, Protector, Editor
Edit an Answer in Q&AsilversilversilversilverYesSubEditor, Protector, Editor
Delete a Question in Q&AYesSubEditor, Protector, Editor
Delete an Answer in Q&AYesSubEditor, Protector, Editor
Report an ArticlesilversilversilversilverSubEditor, Mentor, Protector, Editor
Approve/Disapprove a pending ArticlegoldgoldgoldgoldSubEditor, Mentor, Protector, Editor
Edit other members' articlesSubEditor, Protector, Editor
Create an article without requiring moderationplatinumSubEditor, Mentor, Protector, Editor
Approve/Disapprove a pending QuestionProtector
Approve/Disapprove a pending AnswerProtector
Report a forum messagesilversilverbronzeProtector, Editor
Approve/Disapprove a pending Forum MessageProtector
Have the ability to send direct emails to members in the forumsProtector
Create a new tagsilversilversilversilver
Modify a tagsilversilversilversilver

Actions with a green tick can be performed by this member.

GeneralThe Mediocre Mindset Pin
Dominic Burford29-Mar-17 1:10
professionalDominic Burford29-Mar-17 1:10 
GeneralHow much code coverage is enough? Pin
Dominic Burford21-Mar-17 5:14
professionalDominic Burford21-Mar-17 5:14 
GeneralThe Mythical Full Stack Developer Pin
Dominic Burford14-Mar-17 3:18
professionalDominic Burford14-Mar-17 3:18 
GeneralCreating your own private NuGet server Pin
Dominic Burford2-Mar-17 0:36
professionalDominic Burford2-Mar-17 0:36 
GeneralConsuming a dependency using NuGet Pin
Dominic Burford28-Feb-17 6:05
professionalDominic Burford28-Feb-17 6:05 
GeneralCoding Standards Pin
Dominic Burford24-Feb-17 6:02
professionalDominic Burford24-Feb-17 6:02 
GeneralSoftware Architecture Challenges Pin
Dominic Burford17-Feb-17 1:31
professionalDominic Burford17-Feb-17 1:31 
GeneralGetting the Most Out of Your Unit Tests Pin
Dominic Burford9-Feb-17 9:21
professionalDominic Burford9-Feb-17 9:21 
Whilst recently viewing the code coverage results from one of our applications, I was looking for areas which contained poor code coverage to see if there was any way to improve code coverage in those areas. One area that can be difficult to unit test are exception conditions. If you are implementing structured exception handling using
try / catch
blocks, then it can be challenging to unit test the code contained within the catch block. Although most (if not all) unit testing frameworks contain mechanisms for testing exceptions, it can be difficult to set up the conditions that will trigger an exception.

I tend to follow the rule of thumb that states "If you aren't going to handle an exception then don't catch it". There is little point catching an exception if all your code does is throw the exception back up the call stack. In the case of my ASP.NET WebAPI application, all the controllers contain structured exception handling. This is the last chance saloon to catch any exceptions before handing control back to the client, so it makes sense to catch exceptions on the part of the application exposed to the client. I also log all exceptions so that I can later diagnose them.

I also catch exceptions in my data layer. I implement a retry mechansim on those methods that do not use the Azure Service Bus (a service bus architecture will automatically implement a retry mechanism if an exception is thrown and place the request back on the service bus queue where it can be re-tried again). These are the only specific areas of the application where I have implemented structured exception handling.

When implementing the business layer, I wanted to ensure I could unit test the various methods without the data layer methods having to actually connect to the data itself. So I implemented an architecture that allowed this from the ground up. My business layer classes contain a reference to an interface that implements the data handling methods. My unit tests implement this interface with implementations of the various methods under test. This is then injected into the constructor of the business layer class at run time by the unit tests. My business layer class contains a default constructor which instantiates the default SQL Server data layer class. It also contains a constructor which accepts an instance of the interface containing the definitions of methods that have been implemented specifically for unit testing. So with good design from the very outset it is perfectly possible to unit test your entire business layer using constructor injection.

This is the definition of the SQL Server data class. Notice it implements the IMyInterface interface.
public class MyDataClass: BaseData, IMyInterface
	// implement data methods here
This is the definition of the unit test data class. Notice it also implements the IMyInterface interface.
public class MyUnitTestDataClass: IMyInterface
	// implement data methods here
Here is the definition of the IMyInterface interface.
public interface IMyInterface
    List<Mileage> GetPreviousMileages(int driverId);
    List<Driver> GetDriverVehicles(int driverId);
The business layer class then implements constructor injection so that it can accept either a concrete instance of the unit test implementation or the SQL Server implementation.
public class MyBusinessService
    private readonly IMyInterface _data;

    /// <summary>
    /// If no data class is passed to the constructor then use the default data class.
    /// </summary>
    public MyBusinessService()
        this._data = new MyDataClass();

    /// <summary>
    /// Allow unit testing fixtures to implement their own version of the data class
    /// which can be injected via the constructor.
    /// </summary>
    /// <param name="data"></param>
    public MyBusinessService(IMyInterface data)
        this._data = data;
The unit tests instantiate the business layer by injecting a unit test specific instance of the interface, as in the following example.
public void MyTestMethods()
    MyBusinessService service = new MyBusinessService(new MyUnitTestDataClass()); //inject your unit test class here
    var result = service.GetPreviousMileages(123);

I will delve more into unit testing in future articles as it's an area where huge benefits can be made to increasing the quality of the software. It also forces you to write code in such a way that it is unit testable in the first place, and this in itself is a good reason to implement unit testing within a development team. If you're not writing unit tests, you're doing it wrong.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare

Home | LinkedIn | Google+ | Twitter

GeneralBuilding a strong development team Pin
Dominic Burford8-Feb-17 6:31
professionalDominic Burford8-Feb-17 6:31 
GeneralLast pieces of the mobile app in the Web API puzzle Pin
Dominic Burford27-Jan-17 5:03
professionalDominic Burford27-Jan-17 5:03 
GeneralSerializing .NET types that contain DateTime Pin
Dominic Burford22-Jan-17 18:53
professionalDominic Burford22-Jan-17 18:53 
GeneralClearing the Dead Letter Queue on an Azure Service Bus Queue Pin
Dominic Burford16-Jan-17 8:57
professionalDominic Burford16-Jan-17 8:57 
GeneralMigrating ASP.NET Web API services to the Azure platform Pin
Dominic Burford10-Jan-17 2:45
professionalDominic Burford10-Jan-17 2:45 
GeneralProcessing Azure Service Bus messages using an Azure Function Pin
Dominic Burford4-Jan-17 9:10
professionalDominic Burford4-Jan-17 9:10 
GeneralThe Structure of an Azure Service Bus message Pin
Dominic Burford30-Dec-16 3:11
professionalDominic Burford30-Dec-16 3:11 
GeneralMy Introduction into Service Bus Architecture Pin
Dominic Burford21-Dec-16 6:40
professionalDominic Burford21-Dec-16 6:40 
GeneralAdding resilience to your services by implementng a retry pattern Pin
Dominic Burford19-Dec-16 1:10
professionalDominic Burford19-Dec-16 1:10 
GeneralAuthenticating Web API services with JSON Web Token Pin
Dominic Burford13-Dec-16 2:26
professionalDominic Burford13-Dec-16 2:26 
GeneralDeploying to Azure with Team Foundation Server 2015 Pin
Dominic Burford9-Dec-16 2:29
professionalDominic Burford9-Dec-16 2:29 
GeneralCatch me over on Medium for my latest blog posts Pin
Dominic Burford7-Dec-16 1:15
professionalDominic Burford7-Dec-16 1:15 
GeneralWeb application metrics with Application Insight Pin
Dominic Burford25-Nov-16 10:03
professionalDominic Burford25-Nov-16 10:03 
GeneralHow to Pick Your Battles on a Software Team Pin
Dominic Burford16-Nov-16 2:33
professionalDominic Burford16-Nov-16 2:33 
GeneralComplete 360 Testing Pin
Dominic Burford27-Oct-16 2:49
professionalDominic Burford27-Oct-16 2:49 
GeneralCompleted the ASP.NET Web API build pipeline Pin
Dominic Burford24-Oct-16 1:18
professionalDominic Burford24-Oct-16 1:18 
GeneralOne code-base for all mobile platforms is a pipe dream Pin
Dominic Burford12-Oct-16 18:42
professionalDominic Burford12-Oct-16 18:42 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.