`Presenter` is a better name than `Formatter` for this — it should be more familiar to more people. Also, this `AbstractArtefactFormatter` could just be `ArtefactPresenter`, the fact that it raises `NotImplementedError`s is probably enough of a clue that it's abstract.