Design

Java Beans の大罪 〜 getter/setter を捨てて美しきオブジェクトの世界で生きよ〜

まえがき はじめに Java Beans の誕生 サーバサイドの台頭 Struts と BeanUtilsの興起 Enterprise JavaBeans ORM の台頭 getter/setter は良くない習慣です なぜ getter/setter は悪なのか 悪の囁きに対する処方箋 まとめ まえがき 以下のコードを見てくださ…

REST と RESTful と RESTish について

はじめに REST とは RESTful とは RESTish とは まとめ はじめに REST と RESTful 、さらに最近では RESTish という用語についてのまとめです*1。 REST とは REST(REpresentational State Transfer)という言葉が何を指すかは、かなり発散する話題です。 元と…

双方向の依存を避ける

これがあったら こうして こうして こう これがあったら こうして こうして こう

Implementing Domain-Driven Design の出だし紹介

ようやく邦訳版がでますのでリンクだけ更新しておきます。 実践ドメイン駆動設計 (Object Oriented Selection)作者: ヴァーン・ヴァーノン,高木正弘出版社/メーカー: 翔泳社発売日: 2015/03/17メディア: 大型本この商品を含むブログ (1件) を見る Implementi…

アナパタ リターンズ その5:Knowledge Level (Accountability)

blog1.mammb.com 前回の続き。 Knowledge Level オブジェクトがどのように振る舞うべきかについて述べてるオブジェクトのグループを Knowledge Level(知識レベル) として区別して識別する(別名 メタレベル)。 モデルは、構造や振る舞いをルール化する Knowle…

アナパタ リターンズ その4:Accountability

blog1.mammb.com 前回の続き Accountability パーティー間の複雑な依存関係グラフを表す。 単純な組織階層を扱う場合には、Organization Hierarchy でどうにかなるが、大きな組織を扱いだすと手に負えなくなってくる。例えばACM社のボストン営業所はニューイ…

アナパタ リターンズ その3:Aggregating Attribute

blog1.mammb.com前回の続き、 Aggregating Attribute 組織構造などの階層構造において、特定のオーバーライドが無い限り、子が親の属性を引き継いで使用する。 親の特性を子供が共有することはよくある。例えば、会社の会計通過が米ドルであれば、子供となる…

アナパタ リターンズ その2:Organization Hierarchy

blog1.mammb.com 前回の続き、 Organization Hierarchy 組織の階層構造を表す 再起構造は古くは pigs ear と呼ばれたように自身への関連を追加するだけで非常に単純に表現できる。しかしこの関連だけでは、最上位のオブジェクトには親が存在しないことや、あ…

アナパタ リターンズ その1:Party

昔のメモを発掘したので今さらですが・・ 言わずと知れた 邦訳アナパタですが、Odell で書かれていたり、無理に日本語にしてしまっていたりして読みにくいですよねー アナリシスパターン―再利用可能なオブジェクトモデル (Object Technology Series)作者: マ…

The Stable Abstractions Principle (SAP) 安定抽象概念原則

安定抽象概念原則とは パッケージの安定度を最大にするには、抽象度を最大にする必要があり、不安定なパッケージは具象でなければならない。パッケージの抽象はその安定性と比例するべきである。 Packages that are maximally stable should be maximally ab…

The Stable Dependencies Principle (SDP) 安定依存原則

安定依存原則とは パッケージ間の依存関係の設計は、安定性のある方向に向かわなければならない。パッケージはより安定したパッケージに依存すべきだ。 The dependencies between packages in a design should be in the direction of the stability of the …

The Acyclic Dependencies Principle (ADP) 非環式依存原則

非環式依存原則とは パッケージ間の依存構造グラフは無閉路有向グラフでなければならない。つまり依存構造が循環してはならない The dependency structure between packages must be a directed acyclic graph (DAG). That is, there must be no cycles in t…

The Common Reuse Principle (CRP) 共通再利用原則

共通再利用原則 パッケージ内のクラスは同時に再利用される。つまり、パッケージ内の1つのクラスを再利用することは、パッケージに含まれた全てのクラスを再利用することを意味する。 The classes in a package are reused together. If you reuse one of th…

The Common Closure Principle (CCP) 共通閉鎖原則

共通閉鎖原則とは パッケージ内のクラスは、同種の変更理由に対して共に閉じていなければならない。パッケージに影響を及ぼす変更は、パッケージ内の全てのクラスに影響を及ぼすことと同意である。 The classes in a package should be closed together agai…

The Reuse/Release Equivalence Principle (REP) 再利用開放等価原則

再利用開放等価原則とは リリースの単位が再利用の最小単位である。バージョン管理のトラッキングシステムを通してリリースされるコンポーネントだけが効果的に再利用することができる。この最少単位はパッケージである。 The granule of reuse is the granu…

The Interface Segregation Principle (ISP) インターフェース分離原則

インターフェース分離原則とは クライアントは自分が使わないメソッドに依存することを強制されない Clients should not be forced to depend upon interfaces that they do not use. Many client specific interfaces are better than one general purpose …

The Dependency Inversion Principle (DIP) 依存関係逆転原則

依存関係逆転原則とは A.上位モジュールは下位モジュールに依存してはならない。両者は抽象に依存すべきである B.抽象は詳細(抽象の実装クラス)に依存してはならない。詳細は抽象に依存すべきである A. High level modules should not depend upon low lev…

The Liskov Substitution Principle (LSP) リスコフの置換原則

リスコフの置換原則とは 基本クラスへのポインタや参照を使用する関数やオブジェクトは、派生クラスの種類や振る舞いが何であろうと、派生クラスについて全く何も知らなくてもそれを使えるようになっていなければならない Functions that use pointers or re…

The Open-Closed Principle (OCP) 開放閉鎖原則

開放閉鎖原則とは ソフトウェアの実体は、拡張に対して開いていなければならず、しかし一方で、変更に対しては閉じていなければならない。 Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modificati…

The Single Responsibility Principle(SRP) 責務単一原則

責務単一原則とは クラスを変更する理由は一つ以上存在してはならない There should never be more than one reason for a class to change. 内容 クラスを変更する理由が二つ以上になるということは、そのクラスが複数の役割(責務)を担っているということ…

オブジェクト指向設計原則(Principles Of Object Oriented Design)

オブジェクト指向設計原則(Principles Of Object Oriented Design)は、Robert Cecil Martin, Bertrand Meyer, Barbara Liskovを含む様々な人達により提唱された内容を Robert Cecil Martin が纏めたもの。オブジェクト指向を用いて設計を行う際に有用となる…

概念モデル

概念モデルとは 問題領域の概念の集合 静的な構造図で表される 概念モデルは、「概念」「概念間の関連」「概念の属性」を表現する 概念とは、「物」「考え」「対象」である ソフトウェア設計のモデルではない 概念の抽出方法 ユースケース等から名詞や名詞句…