Kotlinで Layered Architecture

概要

Layered Architectureとは、よく分かりませんが、DDD的なアレです。 詳細は DDDに聞いて下さい。

実装方法

要するに Layerを作成すれば良い訳です。Layerとは層です。地層とか断層とかいうアレです。 層を使ったアーキテクチャが Layeredアーキテクチャという理解で間違いないでしょう。

そのアーキテクチャを適用して、鏡餅を描画するプログラムを書いてみました。 引数の数値を変えると段数も変わるようにしてあります。

operator fun String.times(n: Int): String = (1..n).fold("", {a, _ -> a + this})
fun String.padBoth(n: Int, padChar: String = " "): String = (padChar * n) + this + (padChar * n)

data class Mochi(private val layer: Int = 1) {

    override fun toString(): String {
        val base = "${"◯".padBoth(layer)}$LINE_SEP"
        return (1 until layer).fold(base, {a, n ->
            "$a${ ("(" + ("__" * n) + ")").padBoth(layer - n)}$LINE_SEP"
        })
    }

    companion object {
        val LINE_SEP: String = System.lineSeparator()
    }
}
fun main(args: Array<String>) {
    println(Mochi(3))
    println(Mochi(5))
}
   ◯   
  (__)  
 (____) 

     ◯     
    (__)    
   (____)   
  (______)  
 (________) 

Layered アーキテクチャが理解できたでしょうか? では、ごきげんよう