Skip to content

Commit b2a6eb2

Browse files
committed
✨ budougumi0617: add warning to DI
1 parent 93e309a commit b2a6eb2

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

articles/budougumi0617.re

+16-9
Original file line numberDiff line numberDiff line change
@@ -685,20 +685,23 @@ func main() {
685685
//footnote[wire][@<href>{https://github.com/google/wire}]
686686
//footnote[simplicity][@<href>{https://employment.en-japan.com/engineerhub/entry/2018/06/19/110000}]
687687

688-
== 終わりに
689-
 本章では、SOLIDの原則のおさらいをしました。
690-
そして、SOLIDの原則の各原則が@<tt>{Go}のプログラミングの中でどう表出されるのか確かめました。
691-
@<tt>{Go}は一般にオブジェクト指向言語と呼ばれるプログラミング言語がもつ特徴を十分に備えていません。
692-
そのような@<tt>{Go}でもオブジェクト指向設計のプラクティスや原則を守ることで、よりよいいコードを書くことができます。
688+
=== @<tt>{依存関係逆転の原則}と@<tt>{Go}
689+
 @<tt>{DIP}を使うことでパッケージ間、構造体間の結合度を下げることができます。
690+
ただし、早すぎたり過剰な抽象化はソースコードの可読性を下げたり、手戻りが発生しやすくなります。
691+
他言語で@<tt>{DI}ツールが重宝されるのは以下の理由もあります。
692+
693+
* @<tt>{DLL}ファイルや@<tt>{Jar}ファイルから実行時に動的にクラスをロードできる
694+
* フレームワークや@<tt>{UI}に依存した実装を避けたい
693695

694-
 ただし、早すぎたり過剰な抽象化はソースコードの可読性を下げたり、手戻りが発生しやすくなります
695-
特に、@<code>{interface}を使った過剰な抽象化には注意が必要です。
696+
データベースに依存させたくないなどの理由がある場合など、@<tt>{DI}の利用は適切に用法用量を守って使いましょう
697+
 特に、@<code>{interface}を使った過剰な抽象化には注意が必要です。
696698
@<tt>{Go}はインターフェースを使ったダックタイピングを採用しているため、次の箇条書きの情報を得るにはIDEなどの助けが必要になります。
697699

698700
* ある@<tt>{struct}がどの@<code>{interface}を継承しているのか
699701
* ある@<code>{interface}を継承している@<tt>{struct}はどれだけ存在しているのか
700702

701-
@<list>{ensure_interface}は@<code>{Knight}型が@<code>{Jedi}インターフェースを満たしているか、コンパイル時に検証させる方法です@<fn>{ensure}。
703+
現実的な解法の1つとして、ある構造体(実装の詳細)が特定のインターフェースを実装しているかコンパイラにチェックさせる方法があります@<fn>{ensure}。
704+
@<list>{ensure_interface}は@<code>{Knight}型が@<code>{Jedi}インターフェースを満たしているか、コンパイル時に検証させる方法です。
702705
このようなプラクティスはあるものの、過剰な抽象化をしないように気を付けましょう。
703706

704707
//list[ensure_interface][コンパイラを使った実装チェック]{
@@ -714,7 +717,11 @@ var _ Jedi = (*Knight)(nil)
714717

715718
//footnote[ensure][@<href>{https://splice.com/blog/golang-verify-type-implements-interface-compile-time/}]
716719

717-
720+
== 終わりに
721+
 本章では、SOLIDの原則のおさらいをしました。
722+
そして、SOLIDの原則の各原則が@<tt>{Go}のプログラミングの中でどう表出されるのか確かめました。
723+
@<tt>{Go}は一般にオブジェクト指向言語と呼ばれるプログラミング言語がもつ特徴を十分に備えていません。
724+
そのような@<tt>{Go}でもオブジェクト指向設計のプラクティスや原則を守ることで、よりよいいコードを書くことができます。
718725

719726
== 参考文献
720727
最後に、本章を執筆するにあたって参考にした書籍を挙げておきます。

0 commit comments

Comments
 (0)