出力するという概念を抽象化すると、「どこにどのように出力するか」でしょう。
「どのように出力するか」という概念を抽象化すると、順序性とマッピングが考えられます。
こういう順番で、この項目とこの項目を出力したいといった感じです。
この概念を抽象化したインタフェースがWritableRecordです。
ここで、任意のオブジェクトを出力するためには、任意のオブジェクトを入力として受け取って、
特定のフォーマットに従ったWritableRecordに変換する必要があります。
この概念を抽象化したインタフェースがWritableRecordFactoryです。
次は、このようにしてフォーマットされたWritableRecordを「どこに出力するか」となります。
その概念を抽象化したインタフェースがMessageWriterです。
さらに、これらの大きな2つの概念、「どこにどのように出力するか」をまとめて抽象化したインタフェースがCategoryです。
このパッケージでは、これらの概念を具体化したサービスを提供します。