ブックマーク / masuda220.hatenablog.com (4)

  • 『ドメイン駆動設計』の5つの基本アイデア - ソフトウェア設計を考える

    エヴァンス氏の『ドメイン駆動設計』の背景にある基アイデアは何かという私の捉え方のメモ書き。 ドメイン駆動設計にはいろいろな側面がある。また書籍『ドメイン駆動設計』は体系だった設計方法論ではなく、設計の考え方とやり方を経験則として言語化してみた、と捉えている。 その経験則(100%ではないが多くの場合に役に立つ原則)の背景にあるエヴァンス氏の基的な発想は次の5つに要約できると考えている。 ソフトウェアの複雑さは事業活動の複雑さに起因する 技術的な複雑さもあるが、ソフトウェアが複雑になるのは対象領域の複雑さが主たる理由という考え方。 業務アプリケーションであれば、事業活動の複雑さが業務アプリケーションの複雑さの原因と捉える。 ドメイン駆動設計は、この事業活動の複雑さに起因するソフトウェアの複雑さをうまく扱うための工夫、というのが私の捉え方。 ドメイン駆動設計という設計のアプローチを取り入れ

    『ドメイン駆動設計』の5つの基本アイデア - ソフトウェア設計を考える
  • 7つの設計原則とオブジェクト指向プログラミング - ソフトウェア設計を考える

    設計原則はよい設計をするための指針です。 では、よい設計とはなんでしょうか? もっとも重要なソフトウェア品質は発展性 ソフトウェアの発展性がビジネス価値を生む 発展性をうみだす7つの設計原則 モジュール化 モジュール化の2つのアプローチ 型によるモジュール化 手続き的なモジュール化 関心の分離 関心の4象限 入出力と計算・判断の分離 業務の関心と実装の詳細の分離 もっとも複雑な関心事(ビジネスロジック)の分離を徹底する カプセル化と抽象化 カプセル化 ビジネスロジックのカプセル化 抽象化 データ抽象 ビジネスロジックとデータ抽象 高凝集と疎結合 凝集度 結合度 隠された結合性の問題 定義の一点性 見た目が同じコード 7つの設計原則の学び方 コードの実装例 ドメインオブジェクト設計のガイドライン 実践ガイドとして使える 設計の考え方を理解するための もっとも重要なソフトウェア品質は発展性

    7つの設計原則とオブジェクト指向プログラミング - ソフトウェア設計を考える
  • モダンなSIer開発手法 勉強会 - ソフトウェア設計を考える

    昨日、株式会社ディマージシェアさん主催の モダンなSIer開発手法 勉強会 - connpassでお話した内容です。 発表に使った資料 要約 発展性に焦点をあわせる(プロジェクト型からプロダクト型へ転換する) オブジェクト指向ソフトウェア構築の考え方(型によるモジュール化)を基にする ドメイン駆動設計の考え方(ドメインロジックに焦点を合わせ、コアドメインに集中する)を取り入れる 要件定義・仕様・実装を並行して行う 仕様の記述にプログラミン言語(Java)を使う ソースコードから仕様を可視化する 段階的に継続的に品質を向上させる 補足 ソフトウェア開発の複雑さを多面的に捉える ソフトウェアシステムアーキテクチャ構築の原理(第2版)の枠組みで考えてみる。 7つの視点(ビューポイント) 4つの観点(パースペクティブ) 7つの視点 合目的性 コンテキスト 機能 情報 構造性 開発 実行性 並行性

    モダンなSIer開発手法 勉強会 - ソフトウェア設計を考える
  • ソフトウェアのもっとも重要な品質は発展性 - ソフトウェア設計を考える

    ソフトウェアでもっとも重視すべき品質は「発展性」なんだと思う。 機能要求や非機能要求は、時間とともに変化する。その要求の変化に対応してソフトウェアを発展させていける能力、つまり発展性こそがソフトウェアの価値を大きく左右する。 発展性に問題があり変化ができないソフトウェアと、発展性に優れ変化と成長を続けやすいソフトウェアの価値の差ということだ。 発展性の価値 顧客のニーズは変化する。また、市場の競合関係も変化する。そういう事業環境の変化にあわせて、ソフトウェアにも変化を続ける能力が求められている。 また、顧客のニーズや市場環境の変化がゆるやかだとしても、事業活動をすれば組織は経験を通じて学び成長していく。開発チームに限っても、ソフトウェア開発運用の経験を積むことで、開発の考え方とやり方にさまざまな学びと成長がある。そうやって学んだ知識を適切にかつ迅速にソフトウェアに反映できるほど、事業により

    ソフトウェアのもっとも重要な品質は発展性 - ソフトウェア設計を考える
  • 1