【勉強4】リーダブルコード 前半
勉強で「リーダブルコード」を読んだので、個人的に要点をまとめています。表現が正確でない点もあるかと思いますが、あくまで個人的な整理ですのでその点ご理解いただければ幸いです。
第1部 表面上の改善
- 2章 名前に情報を詰めこむ
- 3章 誤解されない名前
- 4章 美しさ
- 5章 コメントすべきことを知る
- 6章 コメントは正確で簡潔に
2章 名前に情報を詰め込む
命名の情報の上手な詰め込み方のコツは以下。
- 明確な単語を使う
- GetPage→FetchPage(ローカルキャッシュやDBでなくインターネットからとるニュアンスが出る。)
- sendの場合以下のシソーラスがある
- deliver, dispatch, announce, distribute, route
- tmpやretvalを避ける。
- 生存期間がわずかで役割が全くない時はOK
- ループイテレータ(i, j, k)もmembers_iとかにすると分かりやすい
- 抽象的より具体的な名前を使う
- ServerCanStart()→CanListenOnPort() (TCP/IPポートをサーバがリッスンできることを明示)
- --run-locally→--extra_logging(実際はログ出力をするという意味を与える。)
- 名前に情報を追加する
- start→start_ms(単位の追加)
- Url→untrustedUrl(安全かどうかの追加)
- 名前の長さ
- 前提として長すぎるのはNG
- スコープが小さい時は「m」とかでもすぐ分かるからOK、グローバル変数とかは長い名前にする。
- 省略形は一般的(evaluation→eval)なもの以外はNG
- 名前のフォーマットで情報を伝える:見やすくする
- Google
- クラス名はキャメルケース、変数名は小文字のアンダースコア、などフォーマットを変える。
- JavaScript
- HTML・CSS
- idはアンダースコアで区切り(middel_column)、classはハイフンで区切る(main-content)
- Google
3章 誤解されない名前
追記中...
【勉強3】現場で役立つシステム設計の原則
勉強で「現場で役立つシステム設計の原則」を読んだので、個人的に要点をまとめています。表現が正確でない点もあるかと思いますが、あくまで個人的な整理ですのでその点ご理解いただければ幸いです。
前半
Chapter1 小さくまとめてわかりやすくする
キーワード
- 変更が大変なプログラムの特徴
- 説明用変数の導入、破壊的代入
- メソッドの抽出
- ドメインオブジェクト
- 業務ロジック
- 値オブジェクト
- 完全コンストラクタ
- コレクションオブジェクト(ファーストクラスコレクション
メモ
- 変更が大変なプログラムは以下の特徴がある
- メソッドが長い
- if-else分が入り混じるとバグが混入しやすい。
- クラスが大きい
- 変更が必要な箇所がクラスのどの部分かが分かりにくくなる。
- 引数が多い
- 変更時のどの引数が関係し、どの引数が関係しないかの見極めが難しい。
- 引数が多いと必然的にめそっどが長くなりif文も増える。
- メソッドが長い
- 説明用変数の導入:計算の目的ごとに新しい意味のある名前を付けて変数を作る。逆に1つの変数を使いまわすのを破壊的代入と呼ぶ。
- 説明用変数を積極的に導入することで破壊的代入が減り、プログラム変更時のバグが減る。
- メソッドの抽出
- ある目的(送料計算)の計算をメソッド・関数で切り出すことで、メソッド内の変更を中に閉じ込めやすくなる。
- 異なるクラスにロジックが重複している場合は、別のクラスを新規作成し共通のロジックの置き場所とする(例では送料クラスを新たにつくり、送料クラスのインスタンスを立ち上げamountメソッドを呼び出す。)
- ドメインオブジェクト:業務で使われる用語(ex 送料)に対応するクラスのこと。業務の構造とプログラムの構造が一致すると良い。
- 送料計算のたった2行のメソッドすらも切り出すのが、変更を容易にする。
- 業務ロジック:計算(合計、端数の丸め込み)、判定(期限切れ名の判定)、加工(フォーマット)
- 値オブジェクト(Value Object)
- 金額をただintで宣言したり、電話番号をstringでただ宣言するのは危険。
- 専用のクラス(Quantity、Telphone)をつくり、そこに制約を課す。
- 全ての関数の引数は値オブジェクトを受け付けるようにすると安全
- 完全コンストラクタ
- 値オブジェクトは内部の変数を変更不可にし、新しい値(ある商品の値から1000円割引など)は別のオブジェクトを返すようにする。
- コレクションオブジェクト(ファーストクラスコレクション)
- リストなどの要素の追加・削除・書き換えは、そのコレクションオブジェクトの中に閉じ込める。
- コレクションオブジェクトを返すときは、必ず別のオブジェクトを返し、かつ買い替え不可能にする
まとめ
「業務の関心ごと」と「クラス」を一致させること。業務の関心ごとに業務ロジック(計算・判断・加工)と制約・約束事を詰め込む
Chapter2 場合分けのロジックを整理する
追記中...
【勉強2】達人に学ぶDB設計徹底指南書 前半
勉強で「達人に学ぶDB設計徹底指南書」を読んだので、個人的に要点をまとめています。表現が正確でない点もあるかと思いますが、あくまで個人的な整理ですのでその点ご理解いただければ幸いです。
前半 DB概要
第1章 データベースを制する者はシステムを制する
キーワード
メモ
- DBMS(Database Management System)とはデータベースを活用するあらゆるシステム(Amazonの購入履歴データ、Facebookの投稿データなど)で、DBをいつでも簡単に利用可能にできるようにするためにある。
- 代表的なDBMSはPostgreSQL, MySQLなどがある。
- データとは一定の形式(フォーマット)に揃えられた事実のことであり、一番イメージしやすいのは二次元の表形式。
- データベースの代表的モデル
- ITのシステムの設計、またはシステム開発では以下の工程が必要である。
- 1.要件定義:システムが満たすべき機能やサービスの水準を決める。
- 2.設計:要件を満たすために必要なシステムの設計・デザインを行う。より詳細には以下の設計が必要である。
- アプリケーション(AP)設計:ソフトウェアの提供する機能を決める。
- ユーザーインターフェース設計:ユーザーが使用する画面の設計
- データ設計
- 3.開発(実装):プログラマによるコーディング以外にも、サーバーやネットワーク機器のハードウェアの環境構築も含む
- 4.テスト:システムが要件を満たす品質があるかと試験する。大きく分けると、機能的な品質のテストと非機能品質(性能や信頼性)のテストに大別される
- 本書は設計に焦点を当てる。
- データ設計、特にデータベースに保持するデータの設計(データベース設計)はITの設計の中で最も重要である。
- 3層スキーマはDB設計の段階を示す
第2章 論理設計と物理設計
追記中...
【勉強1】Webを支える技術 前半
勉強で「Webを支える技術」を読んだので、個人的に要点をまとめています。表現が正確でないものもありますが、あくまで個人的な要約ですのでその点ご理解いただければ幸いです。
目次
第1部 Web概論
第1章、第2章
キーワード
- ハイパーメディア
- 分散システム
- HTTP,URI,HTML
- SOAPvsREST
メモ
- Webとは分散システムのハイパーメディアであり、HTTP、URI、HTMLの3技術で構成される。
- Webはインターネットを用いたハイパーメディア
- Webは分散システム
- Web以前の分散システムはRPCやCORBRA,DCOMがある。
- これらは均一なクライアントを前提としており、世界規模にスケールアップしにくい
- SOAB vs REST
第3章
追記中...