08.09.2013 Views

Microsoft .NET: Architecting Applications for the Enterprise ... - BattleIT

Microsoft .NET: Architecting Applications for the Enterprise ... - BattleIT

Microsoft .NET: Architecting Applications for the Enterprise ... - BattleIT

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Chapter 1 Architects and Architecture Today 9<br />

are agile, <strong>the</strong> more freedom and independence you leave to developers when implementing<br />

<strong>the</strong> architecture.<br />

Defi ning <strong>the</strong> Borderline Between Architecture and Implementation<br />

The constituent components you identifi ed while breaking down <strong>the</strong> system represent logical<br />

functions to be implemented in some way. The design of components, <strong>the</strong>ir interface, <strong>the</strong>ir<br />

responsibilities, and <strong>the</strong>ir behavior are defi nitely part of <strong>the</strong> architecture. There’s a border,<br />

though, that physically separates architecture from implementation.<br />

This border is important to identify because, to a large extent, it helps to defi ne roles on a<br />

development team. In particular, it marks <strong>the</strong> boundary between architects and developers.<br />

Over <strong>the</strong> years, we learned that architects and developers are not different types of fruit, like<br />

apples and oranges. They are <strong>the</strong> same type of fruit. However, if <strong>the</strong>y are apples, <strong>the</strong>y are like<br />

red apples and green apples. Distinct fl avors, but not a different type of fruit. And nei<strong>the</strong>r<br />

fl avor is necessarily tastier.<br />

You have arrived at <strong>the</strong> border between architecture and implementation when you reach a<br />

black box of behavior. A black box of behavior is just a piece of functionality that can be easily<br />

replaced or refactored without signifi cant regression and with zero or low impact on <strong>the</strong><br />

rest of <strong>the</strong> architecture. What’s above a black box of behavior is likely to have architectural<br />

relevance and might require making a hard-to-change decision.<br />

What’s our defi nition of a good architecture? It is an architecture in which all hard-to-change<br />

decisions turn out to be right.<br />

Dealing with Hard-to-Change Decisions<br />

There are aspects and features of a software system that are hard (just hard, not impossible)<br />

to change once you have entered <strong>the</strong> course of development. And <strong>the</strong>re are aspects and<br />

features that can be changed at any time without a huge ef<strong>for</strong>t and without having a wide<br />

impact on <strong>the</strong> system.<br />

In his book Patterns of <strong>Enterprise</strong> Application Architecture (Addison-Wesley, 2002), Martin<br />

Fowler puts it quite simply:<br />

If you fi nd that something is easier to change than you once thought, <strong>the</strong>n it’s<br />

no longer architectural. In <strong>the</strong> end architecture boils down to <strong>the</strong> important<br />

stuff—whatever that is.<br />

To sum it up, we think that under <strong>the</strong> umbrella of <strong>the</strong> term architecture falls everything you<br />

must take seriously at quite an early stage of <strong>the</strong> project. Architecture is ultimately about<br />

determining <strong>the</strong> key decisions to make and <strong>the</strong>n making <strong>the</strong>m correctly.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!