module
#WIP
モジュール (module): 実装の詳細を外部に漏らさないための抽象化の単位.有限個のメンバ (member) と呼ばれる内容からなり,各メンバは函数だったり,型だったり,或いは入れ子のモジュールだったりする.モジュールはメンバのうち一部の存在を非公開にしたり,型のメンバの定義を抽象化して外部に提供したりする.ref
多くの言語は「module」と呼んでいるが、Goでは「package」と呼ぶものがそれ
Goはmodule/packageの用語の使い方が逆になっている
/mrsekut-book-4873119820/062 (3章 モジュール性)
モジュールの 概念はソフトウェアアーキテクチャの世界では一般的であるものの、その定義は曖昧だ。 インター ネットで検索すると、何十もの定義が見つかるだろう。しかし、それらに一貫性はないし、矛盾しているものさえある。
/mrsekut-book-4873119820/064
本書におけるアーキテクチャについての議論では、クラスや関数をはじめとする、 関連するコー ドのグループ化を表す一般的な用語として、モジュールという用語を使用する。 モジュールは、物理的な分離を意味せず、 論理的な分離のみを意味する。
/mrsekut-book-APoSD/Chapter4 (モジュールは深くあるべき)
モジュールはインターフェースと実装を持つコードの任意の単位
モジュラーデザインの目標は、モジュール間の依存関係を最小限にすること
インターフェースが実装よりもはるかにシンプルなものであると良い
シンプルなインターフェースは、システムの残りの部分に課される複雑さを最小限にする
モジュールがそのインターフェースを変更しない方法で修正された場合、他のモジュールはその修正の影響を受けない
interface
指標が欲しい
直交性
オープン・クローズドの原則 (OCP)
/nwtgck/「ライブラリを使うときに「 使うがexposeしない 」という段階が個人的にある話
moduleの作り方のようなまとめが欲しい
#??
どういう指標で同じmoduleにまとめて
何を公開するのか
逆に、外部moduleをimportする際の工夫などはあるか
でもLayered Architectureのうちのどの部分のmoduleの話をしているかで内容は変わってくるのか
Entityのmodule設計と、Usecaseのmodule設計はまた全然違う感じになりそうな気がする
というか各所の良いmoduleの設計方法、というのがLayered Architecture、となるのか
つまり考える順序が逆
ということは、今mrsekut.iconが知りたいのはEntityのmoduleの作り方だなたぶん
この辺の話はOOPでやると雑になる印象があるmrsekut.icon
classがどでかいので。
いや、知らんけど
上手くやる方法はあるかも知れないが、なんかノイズが多すぎる
https://github.com/yukitos/notes/blob/master/A_recipe_for_a_functional_app/Organizing%20modules%20in%20a%20project.md?utm_source=pocket_mylist#レイヤー設計に対する関数的アプローチ
型と関数の組み合わせとしては以下の3パターンがあります:
これはちょっとF#固有といった感じもするmrsekut.icon
Haskellとかだと、directoryごとに公開できる範囲を指定したいんだけど、無理なのかな
Post
Type
Parser
Test
Main
のようにあった時、Type内で定義したものを、Post以下では全公開したい
けど、Postの外には公開させたくない
https://github.com/spicydonuts/purescript-react-basic-hooks/tree/main/src/React/Basic
これみたいにしたらいいんかな?
ゆーざーにはHooks.pursから読み込んでもらうようにする
ほかからも読み込もうと思えばできるけど、基本的にはソレはしないという運用
みたいな
https://stackoverflow.com/a/14379426
https://www.reddit.com/r/haskell/comments/8w90ia/test_non_public_functions/
Barrelも同じようなものだもんなmrsekut.icon
TypeScript
https://zenn.dev/qnighy/articles/9c4ce0f1b68350#モジュールとスクリプト
#??
Hoge型からPiyo型に変換する関数は、どのmoduleに置くべきなのか?
Hoge module?
Piyo Module?
Project全体で見た時により重要な方に置くだろう
Piyoの方が重要なら、PiyoにtoHoge、fromHogeを置く
PiyoがDomain Modelなら、Piyoの方が重要だろう
同じぐらいならどうだろう?
お互いに、fromXXXを置くとか?
かなり独立しているものなら、お互いにtoXXXとfromXXXを置くとか?
冗長だけど
https://guide.elm-lang.jp/webapps/structure.html
Elm、2000行のコードを1fileに収める
わけることでそもそもどういう問題が起きるのか?
このコードはどこに置けばいい?と迷うこと?
迷いを消すために全て1つのところに置くのが正解7日?mrsekut.icon