…

Main menu

Tag Archives: Test Driven Development

Just wanted to post a quick update regarding the development efforts on Atomic Stack. I’ve started writing unit tests for the classes developed so far. Development on the target code with be mostly halted until the tests have been caught up. After that time, I plan on adhering to TDD practices going forward on the project.

I’ve started with unit tests for the .Net side, but also plan on writing tests for the web/js side. If anyone has any suggestions on JavaScript unit testing tools to check out, please leave a comment below. I should be exploring options for testing the web side over the next couple of weeks. I’ve already planned ahead for unit testing on the web side by abstracting away the HTMLDom by way of the as of yet incomplete baseApplication class. There is an htmlDomApplication concrete class that provides the wiring to the HTMLDom. I plan on using an alternative implementation to provide a mock for unit testing.

So, I’ve been thinking about how I wanted to try to jump start my blog for a very long time. The problem is, that for as much as I like technology, I’ve never really taken to the typed word. I’ve always preferred to make a phone call rather than write up an email or send a text. For as fast as I can type, it seems that I can never really type fast enough to get my ideas recorded, except generally in perhaps the case of programming which is good, given that I’m a programmer. But when it comes to free-flowing thoughts like those generally relayed via speech, I would definitely prefer to dictate than to actually type. So, I’m going to attempt to use the Voice Memos iOS application as a way to stage the content for my blog.

Recently I decided to start an open source project, based on some opinions I had received at the St. Louis Days of .Net which echoed similar sentiments from the previous year’s conference. You see, over the years I’ve been fortunate to have been tasked with solving some of the most difficult challenges faced by the various teams that I have been a part of. I’ve also been fortunate to have worked with some very talented and skilled individuals on those teams. Some I collaborated with and others I was literally schooled by. I’ve somehow managed to hold on to the practices that have proven useful and advantageous in the various projects that I’ve worked on and assimilated them as recurring patterns. I’ve described some of these patterns to certain individuals over the last few years, and nearly every time, I’ve been asked if any of it was embodied in an open source implementation. The unfortunate answer has always been nothing that I’m involved with and nothing that I was aware of.

So the purpose of this open source project is to embody the set of tools that I will be implementing and leveraging during the course of the development of a personal closed source project of my own. As such, requirements will flow from my personal project to the tool-set project. The tool-set will be comprised of a stack of technologies that I will leverage to build an n-tier web application. These technologies will be new implementations based upon the patterns that I have successfully leveraged over the years. These will include things in the following list, which I plan to go into further detail of in future posts:

Classical inheritance implementation on top of ECMAScript 5/JavaScript 1.8.5 with base class method call dispatching, public and protected access modifiers, instance and static scopes with constructors

Pure client side MVC solution implemented using JSON/HTML/JavaScript

and of course more…

The name of this set of tools is Atomic Stack. The server side tiers (Atomic.Net) are being implemented in .Net using C# due its amazing generics support. The client side tiers (AtomicWeb/AtomicJS) are being built upon HTML5/ECMAScript 5/CSS 3. The project goals will including adherence to development practices including:

Separation of Concerns (including Unobtrusive JavaScript)

Clean Coding Principles

Tier/Down Design and Development (with wide client side development cycles with narrow vertical server side development sprints)

In addition I will be looking at employing additional practices not currently in use including the following:

Design by Contract (at least for application hosted services)

Test Driven Development

I’m sure that if anyone actually comes across this blog, that some may point out that there are a ton of frameworks and libraries out there. They may question, do we really need yet another framework or library, much less a stack of them? Frankly, I’m not sure. I do know however that I have ideas and I would like to contribute those ideas in a tangible way to the community. And due to my past experience, there is a certain degree of independent yet cohesiveness among these ideas which therefore are compelling me to attempt to start from scratch and create these new tools with minimal constraints solely upon the raw platforms that they are to be built upon (.Net, JavasScript, HTML, CSS, etc.). Ofcourse I will very likely be incorporating additional dependencies upon things that are already well written and tested (like Mike Woodring’s DevelopMentor ThreadPool, HtmlAgilityPack and jQuery). But it is very likely that I will avoid some tools whose implementations I find lacking (for example the MS Entity Framework).

Anyway, I droned on long enough and I’m not quite sure how to end this post. If you are interested in checking out the project, please visit http://atomicstack.com.