Programing/Language/SoftwareEngineering の変更点

Top > Programing > Language > SoftwareEngineering

#contents
----

*Architecture [#zc81d57b]
** CQSの原則 [#s4c5a7a8]
副作用を最小限に抑える設計原則
- オブジェクトの状態を変更するメソッドと、値を返すメソッドを分離する

- [[副作用とコマンド・クエリ分離の原則 (CQS) について簡潔にまとめてみた>https://qiita.com/riekure/items/ecf6f2cb12623f3a7b96#:~:text=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%BB%E3%82%AF%E3%82%A8%E3%83%AA%E5%88%86%E9%9B%A2%E3%81%AE%E5%8E%9F%E5%89%87%EF%BC%88CQS%EF%BC%89%201%20%E5%89%AF%E4%BD%9C%E7%94%A8%E3%82%92%E6%9C%80%E5%B0%8F%E9%99%90%E3%81%AB%E6%8A%91%E3%81%88%E3%82%8B%E8%A8%AD%E8%A8%88%E5%8E%9F%E5%89%87%202%20%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8C%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%82%E3%82%8C%E3%81%B0%E3%80%81%E3%81%9D%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AF%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%20%E5%80%A4%E3%82%92%E8%BF%94%E3%81%97%E3%81%A6%E3%81%AF%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%203,%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8C%E4%BD%95%E3%82%89%E3%81%8B%E3%81%AE%E5%80%A4%E3%82%92%E8%BF%94%E3%81%99%E3%81%AE%E3%81%A7%E3%81%82%E3%82%8C%E3%81%B0%E3%80%81%E3%81%9D%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AF%E3%82%AF%E3%82%A8%E3%83%AA%20%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%A6%E3%81%AF%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%204%20%E7%8A%B6%E6%85%8B%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A8%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%AA%E3%81%84%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E6%98%8E%E7%A2%BA%E3%81%AB%E5%88%86%E3%81%91%E3%82%8B%20%E2%86%92%20%E9%9D%9E%E5%B8%B8%E3%81%AB%E6%89%B1%E3%81%84%E3%82%84%E3%81%99%E3%81%8F%E3%81%AA%E3%82%8B%20%E5%89%AF%E4%BD%9C%E7%94%A8%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AA%E3%82%B9%E3%82%AF%E3%82%92%E5%B1%80%E6%89%80%E5%8C%96%E3%81%99%E3%82%8B]]

** SOLIDの原則 [#hf2f8c35]
オブジェクト指向言語における5つの開発原則
+ Single-responsibility principle(単一責任の原則)
クラスや関数は、単一の機能に対しての責任を持つ
+ Open/closed principle(開放/閉鎖の原則)
クラスや関数は、拡張に対しては開放されており、修正に対しては閉鎖されているべきである
+ Liskov substitution principle(リスコフの置換原則)
基底型は派生型で置き換えても動作が変わらないべきである
+ Interface segregation principle(インターフェース分離の原則)
+ dependency inversion principle(依存性逆転の原則)

- [[SOLID>https://ja.wikipedia.org/wiki/SOLID]]

- [[SOLID - Wikipedia>https://ja.wikipedia.org/wiki/SOLID]]
** YAGNI原則 [#x2f6abd1]
"You ain't gonna need it" 機能はじっさいに必要となるまでは追加しない方が良い

- [[YAGNI - Wikipedia>https://ja.wikipedia.org/wiki/YAGNI]]

** DRY原則 [#ub2e5715]
ソフトウェア開発全体において情報を重複させない

- [[あなたはDRY原則を誤認している?>https://qiita.com/yatmsu/items/b4a84c4ae78fd67a364c]]
** GRASP [#bb3ac07f]
"General Responsibility Assignment Software Pattern" オブジェクト指向設計における汎用的な責任性割り当ての9つのパターン

+ Information Expert
-- 必要な情報を持つクラスに責務を割り当てる
-- 情報と責務の分散と情報の隠蔽化を促進する
+ High Cohesion
-- 一つの責務を全うするのに必要最低限かつ、その責務に特化したプロパティとメソッドのみでクラスを構成する
+ Low Coupling
-- クラス間の関連性と依存性は可能な限り小さくする
+ Creator
+ Controller
+ Indirection
+ Polymorphism
+ Protected Variations
+ Pure Fabrication

- [[GRASP - Wikipedia>https://ja.wikipedia.org/wiki/GRASP]]
- [[[オブジェクト指向]GRASPパターンを原書で学ぶ>https://qiita.com/kamikawa_m/items/63bdb1b4c1bd1db798ba]]