Skip to content

Latest commit

 

History

History
70 lines (52 loc) · 3.99 KB

File metadata and controls

70 lines (52 loc) · 3.99 KB

A project where I try to apply best practices about clean architecture, and also experiment a couple of things that are important to me but seem neglected almost everywhere.

Clean Architecture

the clean architecture, also known as hexagonal architecture

Some resources about this architecture:

Specification & Implementation Assemblies

One of my ideas is that there would be two kinds of assemblies:

  • "Specification" assemblies
  • "Implementation" assemblies

"Specification" assemblies

Specification assembly

A few notes about this concept:

  • if Project Owners were developers, here is where they'd write user stories, in the shape of interfaces to implement and blackbox tests to pass.
  • you could rewrite a new, functional project from scratch if you had only these assemblies
  • these assemblies give the developer a binary answer to whether their job is good enough or not through the tests

"Implementation" assemblies

Implementation assembly

A few notes about this concept:

  • you wouldn't be able to understand the functional part of the project if you had only these assemblies
  • yes, I know, that's mixing test code with production code, there are dependencies to the unit testing framework all over the place. I'm experimenting whether the pros beat the cons. Get over it.

Architecture Decision Log

I also believe in Architecture Decision Log and want to experiment with it.

Too often have I stumbled on a piece of code then wondered:

  • "Why the hell was this piece of code designed that way?
  • "Has the developers thought about doing this that way instead? Or couldn't he at that time?"

I'll be using the MADR template:

# Use Markdown Architectural Decision Records

## Context and Problem Statement

We want to record architectural decisions made in this project.
Which format and structure should these records follow?

## Considered Options

* [MADR](https://adr.github.io/madr/) 2.1.0 - The Markdown Architectural Decision Records
* [Michael Nygard's template](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions) - The first incarnation of the term "ADR"
* [Sustainable Architectural Decisions](https://www.infoq.com/articles/sustainable-architectural-design-decisions) - The Y-Statements
* Other templates listed at <https://github.com/joelparkerhenderson/architecture_decision_record>
* Formless - No conventions for file format and structure

## Decision Outcome

Chosen option: "MADR 2.1.0", because

* Implicit assumptions should be made explicit.
  Design documentation is important to enable people understanding the decisions later on.
		  See also [A rational design process: How and why to fake it](https://doi.org/10.1109/TSE.1986.6312940).
				* The MADR format is lean and fits our development style.
				* The MADR structure is comprehensible and facilitates usage & maintenance.
				* The MADR project is vivid.
				* Version 2.1.0 is the latest one available when starting to document ADRs.

Problems solved by the projects

One step that has been very hard to me was to find a business need in order to build projects. I'm currently using katas from the coding dojo KataCatalogue in order to create my projects.