Anatomy of Object Oriented Design

A colleague of mine has a (good) habit of frequently questioning the way we design our applications.

We tend to write a lot of data-driven applications, and stick to a pretty consistent n-tier architecture.  As such, we also write a lot of pseudo-object-oriented code; I say pseudo-object-oriented, since we certainly don’t stick to pure object-oriented design principles.  Data and functionality has a clear divide, with a hierarchy of objects used to represent the state of the application, and another hierarchy of objects used to manipulate that state.  This is in contrast to pure object-oriented design, where domain objects should have both state and behaviour, providing proper abstractions between the domain and underlying functionality.

My colleague drew my attention to an article about classes that end with -ER.  There are also plenty more of these kinds of articles about the internet.

After reading this and a few other articles, I had a think about our use of objects ending in -ER (managers, controllers, helpers, etc.).   Most of what we implement ends up in some kind of procedural/object-oriented mashup, likely as a bi-product of using these -ER classes, but also because of our focus on separating state from behaviour.

I feel an experiment is in order to implement two identical systems using both my current data-driven, n-tier approach, and a pure object-oriented approach.  This should help me compare some different techniques in software design, and hopefully provide some insight on pros and cons of different approaches.

Over the coming weeks (and months, perhaps) I will attempt to implement a representation of the human anatomy, using both an n-tier, data/domain-driven architecture design approach and a pure object-oriented approach.  I will make the code available on Github, and provide a link here if anyone is interested in following along…


To MacBook Pro or not to MacBook Pro

I am currently thinking about making the leap and purchasing a MacBook Pro.  I have thought about it previously, but they always seemed prohibitively expensive, and I never really saw the point in owning one.  However, I think it is time for me to jump on the bandwagon, since I am (hopefully) going to be doing more personal software projects, and should really invest in a machine that is going to last.  So, that being said, what are my options?

  • 13″ or 15″
  • Retina display or not (obviously going for the Retina display – it would be rude not to)
  • i7 or i5
  • 8GB or 16GB RAM
  • 256GB, 512GB or 1TB HDD

We also have to factor in the fact that Apple just (as of March) upgraded the 13″ with a new pressure sensitive Trackpad (the Force Touch Trackpad), but has not (yet) upgraded the 15″ in the same way.  Does this mean that an upgraded 15″ MacBook Pro is going to come out later in the year?  Can I wait that long?  Probably not.

So I am currently leaning towards a 13″ MacBook Pro, with the 2.9GHz i5 processor, 512GB HDD, and upgrade to 16GB RAM.  I also fancy a nice little sleeve for it, like this one.  I figure that I would prefer the portability of the 13″, since I have had a few 15″ laptops in the past which always felt overly cumbersome and stopped me taking it out much.  Also, I can always just plug it in to a screen to get that extra desktop space.  As for storage, I wouldn’t consider leaving anything important on a laptop anyway, so I already have the external storage I would need.

Once I have this shiny new piece of technology, I will have to finally learn how to use a Mac (I’m sure it is easy enough), but I will probably put Parallels on it to run Windows 8.1 (or 10) side-by-side, so that I can continue with .Net development.

Anyways, I will update with what I decide to order, and perhaps put up an un-boxing post on the site too!

New blog

So I’m starting a new blog over here at WordPress, and am just waiting for my domain to move over.

The plan for this blog (at least for now) is to showcase some of my personal development work, DIY projects, editing and also act as a scuba diving journal.  We will see how I get on…