タグ

ブックマーク / j5ik2o.me (4)

  • ServiceとDCIについて - じゅんいち☆かとうの技術日誌

    面白そうなネタがあったので、自分なりの考えをまとめてみる。 Ruby/Rails 用 DI コンテナ Dee をつくった、あるいは Ruby のカルチャーについて この記事はRuby用のDIコンテナの話題なんですが、DCIについても言及されているようです。比較軸はDIそのものというより、サービスとDCIだと思うので、それについてダラダラといくつか考えをまとめてみます。多分も返事になるようでならないかも。それと宗教上の都合でDDDの視点から書きます…。 サービスという言葉はあいまい まず、簡単に前提の整理から。単に”サービス”って言葉が何を指すのか結構曖昧です。 サービスは簡単にいうと手続きとか振る舞いのことですが、細かくいうと、PofEAAでいうサービスと、DDDいうサービスは、目的が異なります。前者はアプリケーションのためにドメインモデルを再利用するためのものです。後者はドメインの知識

  • ScalaでのDCIの実装を考える - じゅんいち☆かとうの技術日誌

    みなさん、こんばんわ。 会社のアドベントカレンダーで、Scalaコードでわかった気になるDDDというブログを書いたのですが、最近、老害を防ぐためにDCIについても勉強中です。 DCIアーキテクチャ – Trygve Reenskaug and James O. Coplien とりあえず、これを読めということらしいですが、今ひとつ理解できなかったので、 Lean Architecture: for Agile Software Development を買って読んでます(巻末にScalaのコード例もあってなかなかよさげです)。 このではtraitのmix-in方式を紹介しているのですが、この方法はイマイチだと思っているので、別の方法を考えてみたのでさくっと紹介します。 暗黙的型変換と型クラスでの実装 今回は、ECサイトなどの、商品(Product)の購入(purchase)について考えて

  • 既存インスタンスの値を変更するにはcopyメソッドを使う - じゅんいち☆かとうの技術日誌

    最近、Scalaの質問が多くなったので、自分としては当たり前と思っていることが多いのですが、回答の効率をあげるために基的なノウハウであってもブログに書いてみようと思います。 ご存知のとおり、Scalaではvalが基です。なので、次のようなオブジェクトの値を変更する場合は新たなインスタンスを作ります。 1 2 3 case class PersonName(firstName: String, lastName: String) val pOld = new PersonName("junichi", "KATO") val pNew = new PersonName(pOld.firstName.toUpperCase, pOld.lastName) 第一引数はよいとしても、第二引数はなんか冗長です。これぐらいならまだいいが、引数が多いと死にします。 そういう時に使うのがcopyメソッ

  • ドメインモデルの関連を表現するには - じゅんいち☆かとうの技術日誌

    たとえばこんなモデルがあって、相互に依存しているケースを考えよう。 注意:説明を簡単にするために、varを利用しています。 従業員1 2 3 4 5 class Employee( val id: Long, val name: String, var depertment: Option[Depertment] = None ) 部署1 2 3 4 5 class Depertment( val id: Long, val name: String, var employees: Seq[Employee] = Seq.empty ) 利用例1 2 3 4 5 val employee = new Employee(1, "KATO") val depertment = new Depertment(1, "Dev") employee.depertment = Some(depertm

  • 1