システム開発で思うところ

Javaで主にシステム開発をしながら思うところをツラツラを綴る。主に自分向けのメモ。EE関連の情報が少なく自分自身がそういう情報があったら良いなぁということで他の人の参考になれば幸い

DDDへの距離感

最近、仕事場で 「DDDって分かります?」 と聞かれて、うーん と思いながら

「仕組み(アーキテクト)と、設計デザイン(思想)の両面があって、仕組みの話はクリーンアーキテクチャのそれに類似だと思います。設計の方はユースケース駆動みたいなフローではなくて、1つ1つのクラスの責務をボトムアップで積み上げていくみたいな感じでしょうか」

ドメインの実装に外部依存を無くして業務の関心事をまとめる、みたいなのも設計側のポイントみたいな気もします」
と答えた(つもり)。
ちゃんと伝わったか、正直自信もないし、それが正しいか?と言われると、、「うーん」と言う感じ。*1

私自身の最近感想として、私はユースケースとかフローとか 流れを中心にしか システムの全体像を把握できないから イマイチ「DDD」を口にするのを避けていたりも。

結局のところ、私が興味を持っていたのは POJOを如何に独立させるのか とか、どうやったらコードで意図を表現できるのかってことであって「ドメインで駆動する」こと自体ではないんだよなぁって。

「VOとか型をつかって実装しよう」「Repositoryと使ってDIP」っていうのは 好みだけど、それをもって「ドメインで駆動している」とは言えないよねぇって。それは あくまで構造の話であって、デザインとは違うっていうか。
もしくは、言葉通りに ドメイン駆動 というのであれば、レイヤー、BC、VO、集約って周辺の話(駆動を支えるもの)であって、あくまでコアは ドメインで駆動するだとすると、それは私には馴染みが悪いというか。

レイヤーや構造の話は設計デザインを支えたり、実現するためのアイディアではあるけど コアではないよねって。

なので、DDDっていうのは避けがちで、関心事(ドメイン)と外部要因を疎結合にする仕組み というようにしていたり、厳密ではないけれど 構造の話をしているという意図で「クリーンアーキテクチャみたいな」という感じで*2、雰囲気を共有する感じで逃げている。

まぁそんな感じ。

多分、TDDが自分に馴染みが悪いと思ったのと近い感じ。
逆にいえば TDDがしっくりくる人は DDDは実質出来ていると思う。

ブログのタグ DDD だけど、これは 構造のアイディアをもらっただけで、駆動はしてないから どうしたものか 迷いつつ残しておこう。*3


*1:最終的には、DDDが出てきた文脈を聞いて、その文脈に合うであろう回答はしたと思うので、おそらく 必要な回答はできたんだと思う

*2:厳密なクリーンアーキテクチャとも違うし、本読んでないし

*3:自分が検索しやすいから

Node.jsのメモ

書籍:Node.jsデザインパターン

github.com

JavaScriptの配列風オブジェクトと「[].slice.call()」による配列変換について - このすみろぐ

コールバック関数地獄を軽減

Node.jsでファイルの読み込みreadFileとreadFileSync

Express

2017年はNode.jsの達人になる!いま知っておきたいベストプラクティス10 - WPJ

express実践入門 · GitHub

Best practices for Express app structure

Express の動作環境を切り替える(NODE_ENV 変数) | まくまくNode.jsノート

[Node.js]Express4で環境ごとの設定をつくる - Qiita

読み込むために参照した情報

実行しているコードが保存されているファイルの名前を取得する | 情報アイランド

What does callback && callback() mean in javascript - Stack Overflow

その他

Node.js の起動オプション、環境変数、npm start の話 - Block Rockin’ Codes

https://maku77.github.io/nodejs/express/switch-env.html

ログ関連のメモ

ログ設計指針 - Qiita

ネットワークのメモ

JavaScriptのメモ

ES2015(ES6) 入門 - Qiita

おじさんが若い時はね$.ajax()のオプションでsuccessとかerrorとか指定していたんだよ(追憶) - Qiita

VueをSSRに乗せると容易にXSSを生み出す場合がある件について - Qiita

メール管理のメモ

www.slideshare.net