January 2005 - Posts
I use ClearCase at work, Visual Source Safe (maintenance) on my older projects, CVS for open source projects and am now making the transition to Subversion (SVN). All I can tell is that it feels great to be back in control :D
With AnkhSVN providing tight VS.NET IDE integration and the nice shell enhancements by TortoiseSVN. All I now need is SVNSpam and ViewSVN and I’m set.
See this installation guide on setting up SVN on your Windows box.
It took me a while to write this little update. I could easily blame this on myself being in crunch mode for the last couple of weeks. Or do as the sign on the door says in our office “Blame Canada”.
Reading through a few reactions (Martin Fowler and Mats Helander) on Jimmy Nilsson's Software Architecture Workshop in Lillehammer I am now depressed about the fact I haven’t been able to attend. The fact I’ve missed Erik Doernenburg's talk on Neo depresses me even more. To feel a bit better about myself I decided to vote in private:
- Low coupling between layers, high cohesion within them. +
- Separation of concerns. +
- Layers should be agnostic of consumers (a layer shouldn't know who's on top of it.) +
- Adaptability: be able to change. +
- User interface modules should contain no business logic. +
- Business logic layers contain no user interface and don't refer to user interface modules. +
- No circular references between layers. +
- There are at least three main layer types: presentation, domain, and data source. -
- Business layer only uses abstractions of technological services. +
- Separate development teams by layer. -
- Layers should be testable individual. +
- Prefer layers to interact only with adjacent layers. -
- A layer should be wary of exposing lower layers to upper layers. +
- Layers should hide lower layers from upper layers. +
- Layers should only interact with adjacent layers. +
- Changing a lower level layer interface should not change upper layer interfaces. +
- Distribute at layer boundaries. -
- Layers are a logical artifact that does not imply distribution between layers. +
- Lower layers should not depend on upper layers. +
- Every layer should have a secret. +
- Layers should be shy about their internals. +
- Layers should be substitutable. +
- Layers can have multiple adjacent upper layers. +
- Always wrap domain logic with a service layer. -
- Rethrow exceptions at layer boundaries. -
- Layers should be independently maintainable and versioned. +
- Layers should have separate deployment units (eg separate jars or assemblies for each layer). -
- Layers may share infrastructural aspects (eg security). +
- The domain layer should not talk to external systems - the service layer should do that. +
- Inbound external interface modules (eg web service handlers) should not contain business logic. +
Ok, I feel better now.
More Posts