doilux’s tech blog

ITに関する備忘録。 DDP : http://doiluxng.hatenablog.com/entry/2018/01/01/195409

2019-01-01から1年間の記事一覧

DDD(Domain Driven Development)でDDT(Dramatic Dream Team)を作る

本記事はドメイン駆動設計#1 Advent Calendar 2019の14日の記事です。 前回はryuseikurataさんの記事でした。 2019年もあとわずかになりました。今年は皇位継承や、多数の大物芸能人の婚約・結婚、個人的にも第一子が生まれるなど、とてもドラマティックな1…

Futureをネストしてハマった

あかんやつ import scala.concurrent.{Await, Future} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration.Duration object Main extends App { Await.ready(test(), Duration.Inf) def test(): Future[Unit] = {…

ドメイン駆動設計でトラッキングIDをどうするか

マイクロサービスっぽくサービスを分解していると、ログを串刺しでみたり分析したりするためにトラッキングIDを付与したいことがあるが、DDDの文脈からいうと、トラッキングIDはドメインの処理とは関係ないため、どうやって引回すか悩む。 例 ↓のデータソー…

マイクロサービスつらいorz

過去のマイクロに振り切ろうとした(そして諦めた)経験を踏まえ、自分の考えるマイクロサービスのいいところとわるいところをまとめる。 多分、オライリーの本とかに同じようなことが書いてある気がする。 分ける対象 分ける対象は以下 プロセス(ジョブ、t…

Lens便利

HoloLensの話ではない。scalaz.Lensの話。 これが ```object Main extends App {val a = A(B(C(D(1))))println(a)val copy = a.copy(a.b.copy(a.b.c.copy(a.b.c.d.copy(2))))println(copy)} case class D(value: Int)case class C(d: D)case class B(c: C)ca…

ScalaでprotoをJSONにする

そもそもなんでわざわざprotoをJSONにしているのかというと 重いバッチがあって、その中で一部の処理が重い 「一部の処理」を別バッチに切り出して並列処理をする 元のバッチのジョブと切り出したバッチのジョブの間でオブジェクトをやりとりしたい =>JSONに…

activatorパターン

オレオレデザインパターン 解決したい課題 DBMSのトランザクション機能が使えない(例:マイクロサービスをまたぐなど)場合に読み取り一貫性を実現する 設計 例えば携帯電話で月の途中でプランを変えた(普通のプランから、Youtubeの通信をカウントしないプ…

akka-streamについて

まずはさっくり作ってみる import akka.actor.ActorSystem import akka.stream.ActorMaterializer import akka.stream.scaladsl.{Flow, Sink, Source} object Main extends App { implicit val system = ActorSystem("sample") implicit val materializer = …

Actorおさらい

akka-streamを検討しているので今一度Actorについておさらい。 サンプル import akka.actor.{Actor, ActorSystem, Props} object Main extends App { val system = ActorSystem("sample") val actor = system.actorOf(Props[SampleActor]) Range(1, 10).fore…

Groovyの==

Groovyの==は、Comparableを実装している場合はcompareToを使って検証するらしい。 Comparableを実装していない場合 @AllArgsConstructor public class Zombie { private final int no; private final String name; } class ZombieTest extends Specificatio…