ブックマーク / scrapbox.io/kawasima (7)

  • 古典ドメインモデリングパターンの解脱 - 大吉祥寺.pm - kawasima

    2024年7月13日の大吉祥寺.pmで発表した「古典ドメインモデル(パターン)の解脱」のスライドログです。 この2冊で書かれているドメインモデルパターンを「古典」の対象にします。 ドメインモデルパターンは「複雑さに対処するため」と述べています。が、古典では次の2点が課題となっていると考えます。 これら2点について個別に見ていきます。 まずドメインモデルパターンから。 Patterns of Enterprise Application Architecture(以降PofEAA)ではこのように定義されています。 PofEAAのドメインロジックの章で使われている「収益認識」の例を取り上げます。 ContractやProduct, RecognitionStrategyなどといったクラスが作られて、これらのインタラクションでビジネスロジックが実現されると説明されています。 では、これらのドメイ

    古典ドメインモデリングパターンの解脱 - 大吉祥寺.pm - kawasima
    turanukimaru
    turanukimaru 2024/07/15
    invalid なデータを含むモデルは invalid なわけで常に valid を保つと言われてもせやねとしか言いようがないし新たにレイヤ作って命名されてもそのレイヤの外が invalid ならそこには何があるんだと思うので言葉遊びな気が。
  • ポイント - kawasima

    #アーキテクチャ大全 設計のポイント 付与率の計算 顧客ランク (ロイヤルティ) 還元率アップキャンペーン 期間限定 店舗限定 ポイント付与のタイミング 即時 後日 キャンセル可能なアクションを伴うポイント付与は、キャンセルできなくなるタイミングまで実際の付与を遅らせる。 ただし、付与予定としてユーザに見せるケースがある。 ユーザがキャンセルした場合は、付与予定を取り消す。 有効期限 固定(dポイント型) 使うたびに延びる(ヨドバシ型) 期間限定ポイント キャンペーンとして有効期限の短いポイントを対象ユーザに一斉に付与する。 ↑の有効期限が使うたびに延びるタイプでも、期間限定ポイントは固定の有効期限を持つ。 参考資料 https://it-koala.com/point_system-814#i-4 https://engineering.reiwatravel.co.jp/blog/ne

    ポイント - kawasima
    turanukimaru
    turanukimaru 2023/07/31
    こーゆー業務ロジックこそ再利用できるはずなんだよな。
  • ドメインモデルの完全性と純粋性 - kawasima

    ドメインモデルには、完全性と純粋性、そしてアプリケーション性能の3つ全てを同時に満足させることは難しい場合があるという話。

    ドメインモデルの完全性と純粋性 - kawasima
    turanukimaru
    turanukimaru 2023/01/23
    ドメイン層で AllUsers インタフェースを宣言し User からはそれを使う。 AllUsersImpl は existsEmailPort を DI して内部からのみ Port が見えるようにすれば漏れない。Port がMicroService に変更になってもドメインモデルに影響はでない。
  • データベース設計におけるNULL - kawasima

    NULL絶対ダメ論や現実的には無理だから上手く付き合っていくしかないんだよ論など見られるが、せっかくCodd博士が上図の分類を提示しておられるので、これを元にもっと詳細化して考えてみよう。

    データベース設計におけるNULL - kawasima
    turanukimaru
    turanukimaru 2022/05/21
    属性とリレーションを正しく区別できる人はいない全ての属性はリレーションにできる。のでこの辺はあまり興味がない。私が気にしてるのはそのNullに意味が有るか?だけかな。未決定以外にNullの意味があるときは危ない
  • なぜマイクロサービスは失敗するのか? - kawasima

    Eberhard Wolffさんのこのプレゼンの要約です https://www.youtube.com/watch?v=B3O-qYM-Kkw 共通のデータモデル 共通のデータモデルを通信に使う 各サービスで必要となるデータの内部モデルは異なるかもしれない データモデルが、共通ライブラリと同じ意味合いになる すべてのサービスが、最新のライブラリを使わなくてはならない 共通データモデルの変更は、す

    なぜマイクロサービスは失敗するのか? - kawasima
    turanukimaru
    turanukimaru 2021/05/11
    マイクロサービスのデータ同期の失敗対策どうしようという話で全部のDBを定期的に同期しようという話になってしまた(白目。直近の記録取って必要なとこだけに抑えるように軌道修正したけど正解は何だったんだろう?
  • ソフトウェアアーキテクチャを学ぶために - kawasima

    いわゆるGoFの23個のデザインパターン。知っておくに越したことはないが、フレームワーク・ライブラリに溶け込みすぎていて、現代では知らないうちに使ってることになるので、余裕があれば。

    ソフトウェアアーキテクチャを学ぶために - kawasima
    turanukimaru
    turanukimaru 2020/02/04
    クリーンアーキテクチャを理解する必要はないけど、ベストプラクティスなしに「アーキテクチャってこんな感じのものです」って指針だけで読んだ気になれるならWeb上の紹介・入門記事で十分じゃない?
  • getter/setterがなぜマズいか - kawasima

    getterとsetterは、クラスをみせかけのデータ構造に変える。で、そのデータ構造は独自のAPIをもつことになる。XとYの属性を持てば、getXとsetX, getYとsetYというように。で、これを使う人はこれらを使って業務をどう組み立てなくてはならないかを学ぶ必要がある。 まぁ、これはまだ良いのだが、データモデリングの観点からいうと、問題を先送りできちゃうことがよりマズいのだ。「Xが変わる可能性があるので、Xをセットできる必要があります。このオブジェクトをインスタンス化した後で変更する必要があるかもしれません。」というように。Xをセットするとして、その変更が業務上何を意味するのか? 全く考えていない。「Xがいつ変更されるのか、またどのような条件下で変更するのかを決めるのは、コードの他の部分に任せるつもりです。」

    getter/setterがなぜマズいか - kawasima
    turanukimaru
    turanukimaru 2019/07/05
    アリストテレスは言った。属性は取得することはできるが与えることは出来ない。属性は操作に付随して変化するもので直接操作できない。例えば物を真中で切れば大きさは半分になるが切らずに半分にすることはできない
  • 1