MimicAdapter

Last edit July 23, 2014
In HexagonalArchitecture you write an AdapterPattern against your external dependencies.

It's important that the adapter add actually do something. Don't write a 1-1 adapter to a new, identical interface. For example, in C#:

    interface IFileSystem
    {
        void DeleteFile(string path);

// etc. - every method on File, Directory, and Path are here. }

class FileSystem { void IFileSystem.DeleteFile(string path) { File.Delete(path); } }

This isn't really an adapter, since there's no real abstraction being created: it's not abstract.

Concerns

This lets you ignore the need for a new, valuable abstraction. Your tests are giving you feedback and you're suppressing that feedback. That abstraction should be a little higher, so that it can hide the ugly details of the dependency that you don't care about.

Exceptions:

  • The adapter is actually one level higher abstraction than the dependency (e.g. "File System" becomes "Blob Store")

  • The adapter adds some functionality that was missing originally (e.g. transactions)

  • Replace primitive-type parameters with a ValueObject (e.g. `string` becomes `FileSystemPath`)

  • The new interface maps terminology from the dependency in to your domain.

  • This is the first step in a series of refactorings, which will create a useful abstraction later.

  • You can't refactor, due to time, risk, or skill constraints.

  • The new interface is a narrower subset of the external interface.

  • The new interface hides something ugly about the external interface.

[CategoryAntiPattern]