第1部 ドメインモデルを機能させる
ドメイン駆動設計におけるモデルの有用性
ソフトウェアの核心
第1章 知識をかみ砕く
効果的なモデリングの要素
知識のかみ砕き
継続的学習
知識豊富な設計
例1.1——隠された概念を引き出す
深いモデル
第2章 コミュニケーションと言語の使い方
ユビキタス言語(UBIQUITOUS LANGUAGE)
例2.1——貨物輸送プログラムを完成させる
声に出してモデリングする
1つのチームに1つの言語
ドキュメントと図
書かれた設計ドキュメント
実行可能な基盤
説明のためのモデル
例2.2——輸送業務と経路
第3章 モデルと実装を結びつける
モデル駆動設計(MODEL-DRIVEN DESIGN)
モデリングパラダイムとツールによるサポート
例3.1——手続き型からモデル駆動へ
骨格を見せる:なぜモデルがユーザにとって重要なのか?
実践的モデラ(HANDS ON MODELERS)
【DDD】ドメイン駆動設計【エリック・エヴァンス】
1デフォルトの名無しさん
2017/10/24(火) 19:39:06.49ID:jO+jDbIG141140
2020/02/08(土) 09:04:48.14ID:YyWxF9Co >>140
PythonのDjangoでWEBアプリを考えています。
PythonのDjangoでWEBアプリを考えています。
142デフォルトの名無しさん
2020/02/08(土) 12:58:17.20ID:0wE1WgKD >>139
Django ORMはActive Record PatternだからDBが先にあるような場合にはうまくいかない
そもそもActive Record使ってるとモデルとデータストアの結合度が高い
分離したければRepository Patternを自分で実装するかそれをサポートしてるフレームワークを選択するか
“python repository pattern”で検索
Django ORMはActive Record PatternだからDBが先にあるような場合にはうまくいかない
そもそもActive Record使ってるとモデルとデータストアの結合度が高い
分離したければRepository Patternを自分で実装するかそれをサポートしてるフレームワークを選択するか
“python repository pattern”で検索
143139
2020/02/09(日) 12:24:41.03ID:dmd9x03B >>142
レスありがとうございました。
DjangoのActive Record Patternはコードファーストと呼ばれるやつですね。
モデルの変更がデータベーステーブルに直結するので、結合度が高いのがわかります。
最初の開発のしやすさがあっても、変更には弱いのだとわかりました。
python repository pattern について情報が少ないですね。
モデルとデータストアをどう分離できるか考えてみたいと思います。
モデルが何か中間層のオブジェクトを経由してデータテーブルに保存できるようにすれば、
モデルの変更はモデルの変更に終止させられるかもしれません。
レスありがとうございました。
DjangoのActive Record Patternはコードファーストと呼ばれるやつですね。
モデルの変更がデータベーステーブルに直結するので、結合度が高いのがわかります。
最初の開発のしやすさがあっても、変更には弱いのだとわかりました。
python repository pattern について情報が少ないですね。
モデルとデータストアをどう分離できるか考えてみたいと思います。
モデルが何か中間層のオブジェクトを経由してデータテーブルに保存できるようにすれば、
モデルの変更はモデルの変更に終止させられるかもしれません。
144デフォルトの名無しさん
2020/02/09(日) 20:14:19.34ID:R6dJMwaP145デフォルトの名無しさん
2020/02/10(月) 00:10:18.78ID:0IUSwyg5 >>144
なるほど。
あるモデルオブジェクトを、中間層にある一対一で対応したクラス食わせると、
データベースの正規化テーブルに適切に分配して、
保存してくれるようなイメージかなあと思っています。
それにしても、モデルの変更は中間層の対応クラスやデータテーブルにも及んでしまうなあ。
なるほど。
あるモデルオブジェクトを、中間層にある一対一で対応したクラス食わせると、
データベースの正規化テーブルに適切に分配して、
保存してくれるようなイメージかなあと思っています。
それにしても、モデルの変更は中間層の対応クラスやデータテーブルにも及んでしまうなあ。
146デフォルトの名無しさん
2020/02/10(月) 20:33:59.96ID:EqwKVKI1 モデルが中心で一番重要だから当たり前
データベースやフレームワークの都合でモデルが振り回される方が厄介
というか安定性が一番高く変化しにくいのがモデルのはずで、先にきちんと分析してある程度要件を固めないといけない
データベースやフレームワークの都合でモデルが振り回される方が厄介
というか安定性が一番高く変化しにくいのがモデルのはずで、先にきちんと分析してある程度要件を固めないといけない
147デフォルトの名無しさん
2020/02/11(火) 10:44:43.50ID:qbg35N4F >>146
モデル中心で設計していきたいと思います。
しかし、データベースが先に立っている旧システムのWEBアプリ化なので、
それらのテーブル上にまたがった(リレーションされた)データを、
どうモデルに切り分けると良いか考えたいと思います。
モデル(∞)-テーブル(1)のような関係になりそうです。
それを結合させられる中間層(リポジトリ?)を自分で考えたいと思います。
モデル中心で設計していきたいと思います。
しかし、データベースが先に立っている旧システムのWEBアプリ化なので、
それらのテーブル上にまたがった(リレーションされた)データを、
どうモデルに切り分けると良いか考えたいと思います。
モデル(∞)-テーブル(1)のような関係になりそうです。
それを結合させられる中間層(リポジトリ?)を自分で考えたいと思います。
148デフォルトの名無しさん
2020/02/11(火) 12:30:25.83ID:rXVtelf6 リポジトリで重要なのはインターフェースと実装を分けること
インターフェースはモデル層になるけど、実装はモデル層にはなくデータベース関連の知識は実装に閉じ込める
python はインターフェースそのものはないみたいだから抽象基底クラスで代用したらどうか
# モデル層はインターフェースのみ定義する
# 使用するデータベースを変更するとか、テストするときはモックに差し替えるとかしやすくなる
from abc import ABC, abstractmethod
class Users(ABC):
@abstractmethod
def save(self, user: User) -> None:
pass
# 実装(インフラストラクチャ層)はお好きなデータベースやフレームワークのORMなどで
import sqlite3
class sqlite3Users(Users):
def __init__(self, conn: sqlite3.Connection):
self.conn = conn
def save(self, user: User) -> None:
# ...
インターフェースはモデル層になるけど、実装はモデル層にはなくデータベース関連の知識は実装に閉じ込める
python はインターフェースそのものはないみたいだから抽象基底クラスで代用したらどうか
# モデル層はインターフェースのみ定義する
# 使用するデータベースを変更するとか、テストするときはモックに差し替えるとかしやすくなる
from abc import ABC, abstractmethod
class Users(ABC):
@abstractmethod
def save(self, user: User) -> None:
pass
# 実装(インフラストラクチャ層)はお好きなデータベースやフレームワークのORMなどで
import sqlite3
class sqlite3Users(Users):
def __init__(self, conn: sqlite3.Connection):
self.conn = conn
def save(self, user: User) -> None:
# ...
149デフォルトの名無しさん
2020/02/11(火) 13:38:06.66ID:v/oRLdRM150デフォルトの名無しさん
2020/02/11(火) 19:36:41.89ID:Vv3Ln0ZS とはいえ普通の開発は既存のDBのテーブルに引きづられるのが実際だろ。
151デフォルトの名無しさん
2020/02/11(火) 21:46:53.70ID:v/oRLdRM152デフォルトの名無しさん
2020/02/13(木) 00:19:28.03ID:slfRt6Hj GoとかRustとかのクラスベースじゃないのとJavaとかのクラスベースってどっちがDDDしやすいの?
ライブラリ、フレームワークとかの資産とかなしにして
ライブラリ、フレームワークとかの資産とかなしにして
153デフォルトの名無しさん
2020/02/13(木) 02:16:39.59ID:zqMi9kcN >>148
詳細なレスありがとうございます。
リポジトリの作成について、
インターフェイスと実装を分ける点についてしっかりと考えてみたいと思いました。
なるほど。
インターフェイスをモデルと合わせておくことは重要だと思いました。
少なくとも、データベース層の変更があってもインターフェイスの実装クラスまでで
影響をストップできるのは素晴らしいです。精神的に安心。
ドミノのストッパーみたいな感じがします。
Pythonにはインターフェイスの概念がないというお話を聞いて、
やはりC#(.net core)で構築することを考えました。
こちらは少し経験があるのでやりやすいからです。
本当はOSS界のPythonに憧れてはいたんですけどね。
詳細なレスありがとうございます。
リポジトリの作成について、
インターフェイスと実装を分ける点についてしっかりと考えてみたいと思いました。
なるほど。
インターフェイスをモデルと合わせておくことは重要だと思いました。
少なくとも、データベース層の変更があってもインターフェイスの実装クラスまでで
影響をストップできるのは素晴らしいです。精神的に安心。
ドミノのストッパーみたいな感じがします。
Pythonにはインターフェイスの概念がないというお話を聞いて、
やはりC#(.net core)で構築することを考えました。
こちらは少し経験があるのでやりやすいからです。
本当はOSS界のPythonに憧れてはいたんですけどね。
154デフォルトの名無しさん
2020/02/13(木) 02:20:34.42ID:zqMi9kcN >>149-151
たしかに、
自分が求めに応じて何を作りたいのかが先に立ちますよね。
すると、モデルが先に来る。
しかし、既に構築済みシステムのデータベーステーブルの存在もあるので、
あくまで、モデル中心にして必要なデータを既存テーブルから拾ってくるというような考え方にしておきます。
その意味では、既存データベースに無い物はモデルとして成立させられないわけですが。
たしかに、
自分が求めに応じて何を作りたいのかが先に立ちますよね。
すると、モデルが先に来る。
しかし、既に構築済みシステムのデータベーステーブルの存在もあるので、
あくまで、モデル中心にして必要なデータを既存テーブルから拾ってくるというような考え方にしておきます。
その意味では、既存データベースに無い物はモデルとして成立させられないわけですが。
155デフォルトの名無しさん
2020/02/13(木) 15:23:21.01ID:6VutC31N 53 恋する名無しさん
2018/12/15(土) 21:15:59.13 ID:Ai0sRA6M0
人様の家に放火する虫ケラ小宇根信博俊興マンコ顔ヤクザが偉そうなカオして長田高校におるわ
信博の眼球にアイスピック突き刺す
ゲロ小宇根
兵庫県教育委員会兵庫県立長田高校小宇根化学痴漢殺人放火魔仮面教師俊興信博エタ部落未逮捕、
兵庫県警ブラックリスト長田高校殺人教師小宇根信博放火殺人化学教師息子俊興二重人格兵庫県教育委員会小宇根信博長田高校の便所で毎日
うんこブリブリ親父家で俊興に便所占領されてカムリ白車で毎朝長田高校まで朝のウンコしに行く汚な顔仮面視強姦エロアニメ大量購入下三条町2-9
小宇根痴漢変態仮面ムッツリスケベブス汚な顔面放火焼け爛れゴキブリ顔信博殺人犯未逮捕女子高生レイプマニア怖い俊興ストーカー信博化学教師
兵庫県教育委員会長田高校長の家火葬場小宇根放火ストーカー魔に焼殺人された哀れ性暴力反社会人格障害教師にタンマリ給料やりステーキ食べ
させ放題放火すき焼き食べさせ放題兵庫県教育委員会長田高校長宅残虐家族全員焼け爛れ顔の長田高校長の家族全員焼死体無惨な長田高校全焼
兵庫県教育委員会は小宇根放火ストーカーに燃やされ全焼兵庫県教育委員会全員火の海俊興ストーカーに燃やされ小宇根放火焼殺魔精神異常家系
2018/12/15(土) 21:15:59.13 ID:Ai0sRA6M0
人様の家に放火する虫ケラ小宇根信博俊興マンコ顔ヤクザが偉そうなカオして長田高校におるわ
信博の眼球にアイスピック突き刺す
ゲロ小宇根
兵庫県教育委員会兵庫県立長田高校小宇根化学痴漢殺人放火魔仮面教師俊興信博エタ部落未逮捕、
兵庫県警ブラックリスト長田高校殺人教師小宇根信博放火殺人化学教師息子俊興二重人格兵庫県教育委員会小宇根信博長田高校の便所で毎日
うんこブリブリ親父家で俊興に便所占領されてカムリ白車で毎朝長田高校まで朝のウンコしに行く汚な顔仮面視強姦エロアニメ大量購入下三条町2-9
小宇根痴漢変態仮面ムッツリスケベブス汚な顔面放火焼け爛れゴキブリ顔信博殺人犯未逮捕女子高生レイプマニア怖い俊興ストーカー信博化学教師
兵庫県教育委員会長田高校長の家火葬場小宇根放火ストーカー魔に焼殺人された哀れ性暴力反社会人格障害教師にタンマリ給料やりステーキ食べ
させ放題放火すき焼き食べさせ放題兵庫県教育委員会長田高校長宅残虐家族全員焼け爛れ顔の長田高校長の家族全員焼死体無惨な長田高校全焼
兵庫県教育委員会は小宇根放火ストーカーに燃やされ全焼兵庫県教育委員会全員火の海俊興ストーカーに燃やされ小宇根放火焼殺魔精神異常家系
156デフォルトの名無しさん
2020/02/13(木) 18:03:52.96ID:r7bSHOfr >>152
クラスベースかどうかの違いはあまり関係ないんじゃないかな
ドメインモデルをコードに落としやすいかどうかは型の表現力によると思う
Sum Typeを作りやすいかどうかや
value object用のimmutableオブジェクトを作りやすいかどうかみたいな部分
RustやSwiftのenumだったりKotlinのdata classみたいなやつ
クラスベースかどうかの違いはあまり関係ないんじゃないかな
ドメインモデルをコードに落としやすいかどうかは型の表現力によると思う
Sum Typeを作りやすいかどうかや
value object用のimmutableオブジェクトを作りやすいかどうかみたいな部分
RustやSwiftのenumだったりKotlinのdata classみたいなやつ
157デフォルトの名無しさん
2020/02/16(日) 13:43:23.03ID:Xiaae5hS ドメインモデル的にDBは検索可能なファイルフォーマットみたいな考え。
PDFやPSDファイルを考えるとわかりやすい。ファイルから読み出すとドメインモデルになる。
PDFやPSDファイルを考えるとわかりやすい。ファイルから読み出すとドメインモデルになる。
158デフォルトの名無しさん
2020/02/18(火) 21:40:17.43ID:2AC9Ct1n それだとormはどういう位置付けになるん?
159デフォルトの名無しさん
2020/02/19(水) 00:06:44.71ID:i9qIzFMe >>158
Repositoryじゃね?
Repositoryじゃね?
160デフォルトの名無しさん
2020/02/19(水) 00:14:21.11ID:pJACNDga 性能で行き詰まった時に普通に破綻しそうなんだが。
161デフォルトの名無しさん
2020/02/19(水) 01:31:27.23ID:i9qIzFMe 性能で行き詰まったら、金の弾丸ブチ込めってばっちゃが言ってた
162デフォルトの名無しさん
2020/02/20(木) 22:05:54.44ID:ABNkvVkH 未だにファクトリーだけメリットがわかりません
newとなにが違うんですか?
newとなにが違うんですか?
163デフォルトの名無しさん
2020/02/20(木) 23:00:47.67ID:Nllb9nDe >>162
引数によって継承したクラスを選択して返す様に設計できる。
引数によって継承したクラスを選択して返す様に設計できる。
164デフォルトの名無しさん
2020/03/05(木) 22:14:17.50ID:h922Dn8C165デフォルトの名無しさん
2020/03/05(木) 22:20:29.48ID:h922Dn8C >>162
DDDというかデザインパターンの話だけど
ファクトリ(系パターン)を使うのは
インスタンスの生成が複雑な時
たとえばAとBのインスタンスを常にペアで使いたいとか
いろんな条件でnewする部分が肥大化していくようなら
毎回書くよりファクトリパターン使う方がスマートでしょ?
DDDというかデザインパターンの話だけど
ファクトリ(系パターン)を使うのは
インスタンスの生成が複雑な時
たとえばAとBのインスタンスを常にペアで使いたいとか
いろんな条件でnewする部分が肥大化していくようなら
毎回書くよりファクトリパターン使う方がスマートでしょ?
166デフォルトの名無しさん
2020/03/08(日) 23:30:12.89ID:4J5clray そうかなあ…一番DDDやりやすいのは関数型言語だと思う
ドメイン設計って、
•あるデータはどんなデータがANDないしORで組み合わさって出来てるのか
•業務プロセスはそれらのデータをどのように変換していくのか
の2点が主だと思ってるけど、
これらは代数的データ型とパターンマッチによってダイレクトに表現できて、
業務プロセスは関数の連続で簡潔に表現できる。
また純粋なビジネスロジックは作用のない関数によって表現され、
ビジネスロジック以外の部分が作用を持つ関数になるはずで、
作用のある無しを型レベルで区別する純粋関数型言語であれば、
その辺の層分けもすごく自然 むしろ別れざるをえない
ドメイン設計って、
•あるデータはどんなデータがANDないしORで組み合わさって出来てるのか
•業務プロセスはそれらのデータをどのように変換していくのか
の2点が主だと思ってるけど、
これらは代数的データ型とパターンマッチによってダイレクトに表現できて、
業務プロセスは関数の連続で簡潔に表現できる。
また純粋なビジネスロジックは作用のない関数によって表現され、
ビジネスロジック以外の部分が作用を持つ関数になるはずで、
作用のある無しを型レベルで区別する純粋関数型言語であれば、
その辺の層分けもすごく自然 むしろ別れざるをえない
167デフォルトの名無しさん
2020/03/08(日) 23:55:07.82ID:2h+/wurX 作用?
168デフォルトの名無しさん
2020/03/09(月) 21:19:31.81ID:bHKN7jy6 左様でござる
169デフォルトの名無しさん
2020/03/09(月) 22:12:07.02ID:ajCpPJPb Webみたいにステートレスで済むなら
関数型の方が簡潔に書ける部分もあるが
ビジネスロジックは複雑な状態遷移や
階層構造を持っていることが多いので
FPでもDDDはできるが
OOの方が向くことが多い
関数型の方が簡潔に書ける部分もあるが
ビジネスロジックは複雑な状態遷移や
階層構造を持っていることが多いので
FPでもDDDはできるが
OOの方が向くことが多い
170デフォルトの名無しさん
2020/03/09(月) 22:18:06.74ID:aVP5r6mu 階層構造を持ってるからOOの方が向いてるってのはよくわからないな
171デフォルトの名無しさん
2020/03/09(月) 23:12:50.10ID:y1num/wG ?複雑な状態遷移があるとFPが向かないっていうのもよくわからないな
状態の数だけ型作って、遷移の数だけ関数つくればいいだけやん
OOPはむやみにクラス内に隠れた状態や依存を作って他のクラスとうまく合成されない物を作りがち
そんなことしてると、非同期な処理を並列化とかしようにも気にしないといけないことが増えて大変な労力だろうに
状態の数だけ型作って、遷移の数だけ関数つくればいいだけやん
OOPはむやみにクラス内に隠れた状態や依存を作って他のクラスとうまく合成されない物を作りがち
そんなことしてると、非同期な処理を並列化とかしようにも気にしないといけないことが増えて大変な労力だろうに
172デフォルトの名無しさん
2020/03/14(土) 17:55:44.71ID:JKHuUiBu >>171
言いたいことはわかるが、websocketみたいなコネクション管理するものを
まるまる関数型で書くなら状態変化を含んだとしてもオブジェクト的に記述した方が
多分楽。
なんでもどっちかに倒そうとすること自体が悪パターンな気がするよ。
言いたいことはわかるが、websocketみたいなコネクション管理するものを
まるまる関数型で書くなら状態変化を含んだとしてもオブジェクト的に記述した方が
多分楽。
なんでもどっちかに倒そうとすること自体が悪パターンな気がするよ。
173デフォルトの名無しさん
2020/03/14(土) 18:05:14.78ID:ZFQFhT9Y 良いとこ取りしていけ
174デフォルトの名無しさん
2020/03/15(日) 00:23:36.09ID:UpO1XTWv >>172
WebSocketかー。やったことないからやってみよう
WebSocketかー。やったことないからやってみよう
175169
2020/03/15(日) 05:56:57.78ID:1/DFOu+E176デフォルトの名無しさん
2020/03/15(日) 08:25:11.78ID:j83nFY2E >>175
あんたに限らず関数型が大規模なプログラム書くのに向かないと思ってる層がちゃんと関数型プログラミングをしたことがなく先入観でもの言ってるのはよくわかった
あんたに限らず関数型が大規模なプログラム書くのに向かないと思ってる層がちゃんと関数型プログラミングをしたことがなく先入観でもの言ってるのはよくわかった
177デフォルトの名無しさん
2020/03/15(日) 08:38:54.73ID:1/DFOu+E178デフォルトの名無しさん
2020/03/15(日) 09:21:24.78ID:UpO1XTWv >>177
それはどの言語でどんなことしようとして「強く実感」したの?
関数型言語が普及しないのは、単に先入観やOOP神話の影響で学ぼう使おうと思う人が少ないからだよ。
関数型プログラミングが普及しない理由は、当然だが関数型プログラミングの諸概念を表現するのに命令型言語が不向きだから。柔道着着て水泳するようなもんだ。
それはどの言語でどんなことしようとして「強く実感」したの?
関数型言語が普及しないのは、単に先入観やOOP神話の影響で学ぼう使おうと思う人が少ないからだよ。
関数型プログラミングが普及しない理由は、当然だが関数型プログラミングの諸概念を表現するのに命令型言語が不向きだから。柔道着着て水泳するようなもんだ。
179デフォルトの名無しさん
2020/03/15(日) 14:50:21.29ID:7lggs81n >>175
>継承や委譲で階層構造を表現できる
OOでは継承や委譲で階層構造を表現できると言われても
関数型の言語よりOO言語のほうがDDDには向いてるという論拠にはならないよ
少し古いスライドだけど、これ見て概要だけでも勉強して
https://www.slideshare.net/ScottWlaschin/domain-driven-design-with-the-f-type-system-functional-londoners-2014
>継承や委譲で階層構造を表現できる
OOでは継承や委譲で階層構造を表現できると言われても
関数型の言語よりOO言語のほうがDDDには向いてるという論拠にはならないよ
少し古いスライドだけど、これ見て概要だけでも勉強して
https://www.slideshare.net/ScottWlaschin/domain-driven-design-with-the-f-type-system-functional-londoners-2014
180デフォルトの名無しさん
2020/03/15(日) 18:32:23.77ID:XbDoNvCk 一昔前のOOP厨と一緒だな。
歴史を学ばん奴は一生ループする。
歴史を学ばん奴は一生ループする。
181デフォルトの名無しさん
2020/03/15(日) 23:47:43.93ID:zobMuC0O >>179 そうだよなと得心する事が多くて良い資料ですね
ドメインに継承や移譲が要るって考えてる人は是非とも読んで欲しいし、反例を挙げて欲しくなる
ドメインに継承や移譲が要るって考えてる人は是非とも読んで欲しいし、反例を挙げて欲しくなる
182デフォルトの名無しさん
2020/03/16(月) 00:15:47.56ID:PIKXUqlC >>179
俺もこのスライドの作成者の本で関数型DDDに入門したクチだけど、本当にわかりやすかった
もともとHaskell, purescriptはやってて関数型には慣れてたけど、
DDDについては知らなかったので、せっかくだから関数型前提で書かれている本でと手にした。
Domain modeling made functional っていう本で、
DDDの解説はもちろん、関数型プログラミングの諸概念の解説もわかりやすく、
一冊で二度美味しい内容で、実用的な関数型プログラミングの入門書としても超おすすめ。
https://youtu.be/dEKvIxsERAI
ちなみにyoutubeにはこのスライドの発表動画もあったりする
俺もこのスライドの作成者の本で関数型DDDに入門したクチだけど、本当にわかりやすかった
もともとHaskell, purescriptはやってて関数型には慣れてたけど、
DDDについては知らなかったので、せっかくだから関数型前提で書かれている本でと手にした。
Domain modeling made functional っていう本で、
DDDの解説はもちろん、関数型プログラミングの諸概念の解説もわかりやすく、
一冊で二度美味しい内容で、実用的な関数型プログラミングの入門書としても超おすすめ。
https://youtu.be/dEKvIxsERAI
ちなみにyoutubeにはこのスライドの発表動画もあったりする
183デフォルトの名無しさん
2020/09/16(水) 23:15:57.30ID:hC0if/qX Matthias Felleisenの「How to Design Programs」を読んで関数型プログラミングに
興味を持ったものです。
次にモナドを勉強しようとしてHaskellの本を読んだがいまいちピンときません。
>>182さんが挙げられている本では、モナドを使ってモデルの実装をしているようですが、
モナドの使い方は理解できますか?
興味を持ったものです。
次にモナドを勉強しようとしてHaskellの本を読んだがいまいちピンときません。
>>182さんが挙げられている本では、モナドを使ってモデルの実装をしているようですが、
モナドの使い方は理解できますか?
184デフォルトの名無しさん
2020/09/17(木) 01:01:40.98ID:m/PpcUvw Scalaで良ければ、manning.comからでてる Functional and Reactive Domain Modeling にモナドでドメインサービス組み立てる話が掲載されてる。
なおFree Monadをベースとしているので軽く死ねる。
https://www.manning.com/books/functional-and-reactive-domain-modeling
なおFree Monadをベースとしているので軽く死ねる。
https://www.manning.com/books/functional-and-reactive-domain-modeling
185183
2020/09/17(木) 23:32:13.91ID:pIiN+iyt >>184
ありがとうございます・・・でもDomain modeling made functional をPDFでポチっちゃいました。
後で読もうと思います。
ところでDDDを学ぶ上で、大規模な開発経験が必要なんでしょうか?
自分は学生で、そのような経験がありません。
『How to Design Programs』では小さなプログラム作成の演習はありましたが、
それ以上の大きさのプログラム作成の方法はありませんでした。
DDDは大きなプログラムをつくるガイドになりますか?
ありがとうございます・・・でもDomain modeling made functional をPDFでポチっちゃいました。
後で読もうと思います。
ところでDDDを学ぶ上で、大規模な開発経験が必要なんでしょうか?
自分は学生で、そのような経験がありません。
『How to Design Programs』では小さなプログラム作成の演習はありましたが、
それ以上の大きさのプログラム作成の方法はありませんでした。
DDDは大きなプログラムをつくるガイドになりますか?
186デフォルトの名無しさん
2020/09/22(火) 23:49:46.08ID:mxGu0eGU >>184
これ
これ
187デフォルトの名無しさん
2020/09/23(水) 00:07:54.77ID:NN2kaL4Y188デフォルトの名無しさん
2020/09/23(水) 06:16:40.99ID:VKAwJeUe DDD興味ある
大いに語るがよい
大いに語るがよい
189デフォルトの名無しさん
2020/09/23(水) 07:12:30.61ID:SbRHy3fQ190デフォルトの名無しさん
2020/09/23(水) 19:36:49.05ID:4eJQ0d8P >>189
thx
thx
191デフォルトの名無しさん
2020/09/30(水) 19:59:30.09ID:0r1wHLnO DDDもそろそろバージョンアップせんと
OOPは時代遅れ
OOPは時代遅れ
192デフォルトの名無しさん
2020/12/02(水) 20:38:28.14ID:E6FeESB6 Freeモナドなんて言語埋め込みDSLを作るってだけ
193デフォルトの名無しさん
2020/12/05(土) 00:03:20.35ID:FFFEgOY+ DDDいいよね!
なんちゃってOOPから脱出する際に役立ったよ
なんちゃってOOPから脱出する際に役立ったよ
194デフォルトの名無しさん
2021/03/31(水) 07:17:34.67ID:PqSCUqXE DDD、CQRS、イベントソーシング…
企業内システムでここまでやってるとこってあるんだろうか
参照系中心のシステムでDDDやるのは愚行?
企業内システムでここまでやってるとこってあるんだろうか
参照系中心のシステムでDDDやるのは愚行?
195デフォルトの名無しさん
2021/05/18(火) 06:36:21.05ID:Z0RWJbQc おれはさとった
名前がちがうだけのValueObjectクラスだけつくって
メソッド引数の位置を間違えられないようにしときゃいいんだ
それだけでいいんだ
バリデーションは入り口でやる
中は値が正しい前提でまったくチェック不要
それがDDD
名前がちがうだけのValueObjectクラスだけつくって
メソッド引数の位置を間違えられないようにしときゃいいんだ
それだけでいいんだ
バリデーションは入り口でやる
中は値が正しい前提でまったくチェック不要
それがDDD
196デフォルトの名無しさん
2021/05/19(水) 20:38:26.97ID:NeVz061v それだけでDDDは語れないような…
いまだに集約がわからんよ
いまだに集約がわからんよ
197デフォルトの名無しさん
2021/05/23(日) 21:05:34.48ID:hHIInayx 教科書が概念的でよくわからんことばっかほざいてる時点でおかしい
サンプルを一発提示すればああこんなのねって
それで終わるだろ!?
サンプルを一発提示すればああこんなのねって
それで終わるだろ!?
198デフォルトの名無しさん
2021/07/13(火) 00:57:28.25ID:FnRTq1rf ガサッと取ってきて変更して全部更新!ってアホなんって思った
これの何がいいの?
これの何がいいの?
199デフォルトの名無しさん
2021/07/13(火) 22:24:26.83ID:fj1E0qkc CRUD で十分な単純なアプリならいらない
200デフォルトの名無しさん
2021/07/14(水) 08:14:14.87ID:wgyTk/up >>197
2003年頃ならともかく。OSSのアプリが溢れている今の状況ならこのアプリのこの部分はこのパターンを使っているって示せると思う。
2003年頃ならともかく。OSSのアプリが溢れている今の状況ならこのアプリのこの部分はこのパターンを使っているって示せると思う。
201デフォルトの名無しさん
2021/08/10(火) 20:46:36.95ID:R7L3+gXm202デフォルトの名無しさん
2021/08/10(火) 23:57:50.00ID:yd00h36W203デフォルトの名無しさん
2021/08/11(水) 22:58:43.10ID:AUz9CV9O204デフォルトの名無しさん
2021/08/12(木) 23:34:58.79ID:1njm/kBk205デフォルトの名無しさん
2021/08/13(金) 08:38:17.53ID:yFah4eQP ほかん
【補完】
《名・ス他》
足りない点を補って完全にすること。
OOPに足りない部分をDDDで補ってるって言いたかったのでは?
別に変だとは思えないけど
【補完】
《名・ス他》
足りない点を補って完全にすること。
OOPに足りない部分をDDDで補ってるって言いたかったのでは?
別に変だとは思えないけど
206デフォルトの名無しさん
2021/08/13(金) 09:30:37.30ID:4chv34Gy OOPを補完するのがプログラミングだろうに
なんでプログラミングスレでOOPが時代遅れだと言えるのか疑問
OOPに足りない部分をプログラミングで補ってるって言いたかったのでは?
なんでプログラミングスレでOOPが時代遅れだと言えるのか疑問
OOPに足りない部分をプログラミングで補ってるって言いたかったのでは?
207デフォルトの名無しさん
2021/08/13(金) 11:25:44.59ID:klCtaRRF OOPはプログラミングを補うものでありプログラミングがOOPを補う訳ではない
208デフォルトの名無しさん
2021/08/13(金) 11:56:11.61ID:VPbn/mvQ209デフォルトの名無しさん
2021/08/13(金) 13:49:07.82ID:iLxHQIIJ OODと言い換えたところで補完もしてなければ包含もしてない
DDDをOOの文脈でしか理解できない人は抽象概念の理解がもともと不得意なのか
日本人の書いたなんちゃってDDD本で分かったつもりになってるか
そもそもOO以外を知らないか
DDDをOOの文脈でしか理解できない人は抽象概念の理解がもともと不得意なのか
日本人の書いたなんちゃってDDD本で分かったつもりになってるか
そもそもOO以外を知らないか
210デフォルトの名無しさん
2021/08/13(金) 14:28:21.12ID:klCtaRRF お前はDDDを学んでもOOP及びOODには何の影響もないみたいだけど、俺は別にDDDで学んだ知識がOOP/OODに役立ってるので、別にどうでもいいっす。
なんで役立ったのか想像できないのなら、その程度ってことでしょう。
なんで役立ったのか想像できないのなら、その程度ってことでしょう。
211デフォルトの名無しさん
2021/08/13(金) 15:21:02.98ID:cdK9y9f/ ブホッw
212デフォルトの名無しさん
2021/08/14(土) 07:58:11.46ID:3YTtOTVG OOPにありがちな、車やエンジンを例にした説明より
DDDの方がしっくりくるというか
あ、OOPでこんなことができるのかと目から鱗だったな
DDDの方がしっくりくるというか
あ、OOPでこんなことができるのかと目から鱗だったな
213デフォルトの名無しさん
2021/08/14(土) 15:27:00.83ID:db9EEEoY いつの時代になってもITの方法論は「方法論オナニストに都合のよい飯の種」の域を出ない
214デフォルトの名無しさん
2021/08/14(土) 15:31:45.91ID:4CNv29yk 建設業のように国が規格を決めてしまえばよかったんだ
国所属の認定団体に承認された関数以外使ってはいけません
国所属の認定団体に承認された関数以外使ってはいけません
215デフォルトの名無しさん
2021/09/16(木) 15:51:11.37ID:PMPdG/+a DDDとは、「ドメイン知識(モデル)」を「駆動」して「開発」する開発手法であって、何か特定のアーキテクチャをあらわすものではない
216デフォルトの名無しさん
2021/09/16(木) 15:54:48.85ID:PMPdG/+a 嘘言いました
最後のDはDevelopmentじゃなくてDesignだったわ
恥ずかしー
最後のDはDevelopmentじゃなくてDesignだったわ
恥ずかしー
217デフォルトの名無しさん
2021/09/16(木) 19:58:10.14ID:d3wmnSJn もーやだー
218デフォルトの名無しさん
2021/09/26(日) 11:30:18.78ID:0AJzxi3v 設計はアーキテクチャを示すものじゃない
言葉が違えば意味が違う
言葉が違えば意味が違う
219デフォルトの名無しさん
2022/05/07(土) 06:20:48.85ID:Japg54lQ DDDは大量データ更新に弱い
10万件のレコードに同じ値をセットする処理に途方もなく時間がかかる
10万件のレコードに同じ値をセットする処理に途方もなく時間がかかる
220デフォルトの名無しさん
2022/07/27(水) 17:37:37.82ID:hi2YYXJ0 カルト宗教だよね
設計というのはパフォーマンス要件の整理と実現に当たってのアーキテクチャを考えるために必要なわけで
機能要件にSLAがないだなんてことは設計するならばありえないし、
じゃあその要件に到達するためにシステムやミドルウェアをどう使っていくかがアーキテクトの肝なところじゃん
APPサーバに閉じた議論しかしてない時点で雑魚システムしか作れんし
雑魚システムにそもそも設計なんざいらんだろって話よ
こういう連中が言い出しそうなこと、DBは抽象化できる
そもそもファイルを保存するならテキストでもいい
依存性の逆転を駆使すればインタフェースに依存させることができるので、アプリから実装詳細が消える!
それでDBがやってくれてるトランザクション制御や成約、整合性の解決を
ファイルシステムで実装するその実装を誰が書くの?
アーキテクトを自称するなら君が書くってことだけど、いったい誰がそんなこと頼んだんだろう
設計というのはパフォーマンス要件の整理と実現に当たってのアーキテクチャを考えるために必要なわけで
機能要件にSLAがないだなんてことは設計するならばありえないし、
じゃあその要件に到達するためにシステムやミドルウェアをどう使っていくかがアーキテクトの肝なところじゃん
APPサーバに閉じた議論しかしてない時点で雑魚システムしか作れんし
雑魚システムにそもそも設計なんざいらんだろって話よ
こういう連中が言い出しそうなこと、DBは抽象化できる
そもそもファイルを保存するならテキストでもいい
依存性の逆転を駆使すればインタフェースに依存させることができるので、アプリから実装詳細が消える!
それでDBがやってくれてるトランザクション制御や成約、整合性の解決を
ファイルシステムで実装するその実装を誰が書くの?
アーキテクトを自称するなら君が書くってことだけど、いったい誰がそんなこと頼んだんだろう
221デフォルトの名無しさん
2022/07/27(水) 17:39:26.99ID:hi2YYXJ0 型システムの理解も貧弱、DBMSの理解も貧弱、なんならネットワーク・プロトコルの理解も貧弱
一生システム完成させる気ないやる気なしエンジニアの最後の拠り所だろ
一生システム完成させる気ないやる気なしエンジニアの最後の拠り所だろ
222デフォルトの名無しさん
2022/07/27(水) 20:57:03.92ID:i1UDtnj5 だいぶ詳しい反論だなw
223デフォルトの名無しさん
2022/07/27(水) 21:51:14.18ID:gDp6GlMI224デフォルトの名無しさん
2023/09/22(金) 05:22:44.35ID:dV2V1da1 これってどうやって気にするの?
225デフォルトの名無しさん
2023/09/28(木) 03:45:15.07ID:i8VmgZE9 ゴシゴシ(-_\)(/_-)三( ゚Д゚) ス、スゲー!
226デフォルトの名無しさん
2023/12/03(日) 23:52:03.41ID:p5/cY/Es テスト
227デフォルトの名無しさん
2024/12/06(金) 22:29:28.26ID:IVgCNi6x 関数型DDDの本の作者のアーキテクチャが話題になっている
Repositoryはいらない
大事なのはIOをロジックの中から排除せよということらしい
以下のように"端に寄せる"
IO
ビジネスロジック
IO
目から鱗だった
IOへの依存をなくすことでテストしやすくなるしモックもいらない
Repositoryはいらない
大事なのはIOをロジックの中から排除せよということらしい
以下のように"端に寄せる"
IO
ビジネスロジック
IO
目から鱗だった
IOへの依存をなくすことでテストしやすくなるしモックもいらない
228デフォルトの名無しさん
2024/12/07(土) 18:42:46.99ID:cdxtdz0L ビジネスロジックはパイプラインで構築して副作用がないようにする
229デフォルトの名無しさん
2024/12/08(日) 00:14:30.46ID:fPMU02oZ DDDは素晴らしいと思うけど、プロジェクト内の他エンジニアのスキルが低いとアンチパターンになるんだよな
230デフォルトの名無しさん
2024/12/08(日) 14:38:22.52ID:5KF429T4 DDDって再現性ないじゃんw
偽科学
偽科学
231デフォルトの名無しさん
2024/12/08(日) 15:54:58.48ID:yVSjHkLG 設計に再現性はないよ
要件が全く同じということがないから
だから難しい
要件が全く同じということがないから
だから難しい
232デフォルトの名無しさん
2024/12/08(日) 15:56:35.36ID:yVSjHkLG IOを"端に寄せて"ビジネスロジックはパイプラインで実行して不変データ構造にするというアイデアマジで凄い
これからこの設計にする
これからこの設計にする
233デフォルトの名無しさん
2024/12/08(日) 19:27:00.60ID:xllqP0wk そのぶんリソースバカ食いのクソアプリの出来上がり
234デフォルトの名無しさん
2024/12/09(月) 00:32:52.38ID:+1IlmX9/ 根っこに流れる考えは、コマンドラインシェルでコマンドをパイプで繋いでいくことと同じだけどね。
一連のワークフローを一つのコマンドとみなして、さらに大きなワークフローに組み込むところとかもね。
一連のワークフローを一つのコマンドとみなして、さらに大きなワークフローに組み込むところとかもね。
235デフォルトの名無しさん
2024/12/19(木) 14:37:51.32ID:fGxiJNMh F#で遊んだ時シェルのパイプじゃんとは思ってた
関数型言語の原点てシェルスクリプトなんか?
関数型言語の原点てシェルスクリプトなんか?
236デフォルトの名無しさん
2024/12/20(金) 12:36:38.38ID:xSkBLBiw >>233
そこで遅延評価ですよ
そこで遅延評価ですよ
237デフォルトの名無しさん
2024/12/20(金) 13:57:42.11ID:UU1VM3lj238デフォルトの名無しさん
2024/12/20(金) 18:04:51.42ID:eZ4ILWvg239デフォルトの名無しさん
2024/12/20(金) 18:26:08.17ID:zuM8e09I >>238
それはお前の作ってるものがしょぼいからだよ
それはお前の作ってるものがしょぼいからだよ
240デフォルトの名無しさん
2024/12/20(金) 18:34:22.69ID:zuM8e09I クラウドはリソース使えば使うだけ課金
レスを投稿する
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 現役猟師・東出昌大、クマ被害続出も過熱する報道に「クマはそんな危ないもんじゃない」理由語る [muffin★]
- イギリス「日本でニュースに関するインフルエンサーを順位付けした」 1位ひろゆき 4位ガレソ 5位池上彰 ガチで終わってると話題に [279254606]
- ハゲがレジやってるコンビニって
- 4時だから窓から4回ちんこ出した
- クマどもが冬眠拒否
- 抜いたことある歴史上の人物
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
