タグ

設計に関するJGEEMのブックマーク (51)

  • ドメイン駆動設計の実践

    2024年7月20日に発売された『ドメイン駆動設計をはじめよう』の概要説明と、ソフトウェア開発現場での活用方法。 ①何が書いてあるか? ②事業活動の分析(1章)⇒設計判断 5章、6章、7章、8章、10章 ③業務知識の発見(2章) ④事業活動の複雑さに立ち向かう(3章) ⑤区切られた文脈どう…

    ドメイン駆動設計の実践
  • いまどきの分析設計パターン10選

    JJUG CCC 2024 Spring 複雑な業務ロジックに立ち向かうための実践技法 【初級編】 ①値の種類 ②範囲型 ③階段型 【中級編】 ④状態遷移 ⑤入出金履歴と残高 ⑥未来在庫 【上級編】 ⑦セット演算 ⑧割合と端数 ⑨決定表 ⑩経路探索

    いまどきの分析設計パターン10選
  • コンポーネント設計って何だろう | ドクセル

    マーチン・ファウラー モジュールとは、明確に定義された一部のサブセットを 理解するだけでシステムを変更できるようにソフトウェ アシステムを分割したものと定義します。 コンポーネントはモジュールの一形態であり、独立して 置換できるという追加の特性を備えています。 出典 martinFowler.com “Software Component” より筆者抄訳 https://www.martinfowler.com/bliki/SoftwareComponent.html https://www.martinfowler.com/bliki/SoftwareComponent.html

    コンポーネント設計って何だろう | ドクセル
  • なぜDependency Injectionなのか? ~関心の分離と疎結合~

    稿は「アーキテクチャを突き詰める Online Conference」における発表「なぜDependency Injectionなのか? ~関心の分離と疎結合~」の登壇原稿となります。 発表時の動画アーカイブは後日公開されたタイミングでリンクを追加いたします。 また、稿のサンプルコードとPower PointはGitHubで公開しています。 「CC BY-SA 4.0」で公開していますので、気に入っていただけたら営利目的含め、ライセンスの範囲で自由に利用していただいて問題ありません。 https://github.com/nuitsjp/WhyDependencyInjection というわけで、稿の目指すゴールはこちら。 今日は、この場にいる皆さんが「なぜDependency Injectionを利用するのか?」ということを、理解いただくのが日のゴールとなります。 というわけで

    なぜDependency Injectionなのか? ~関心の分離と疎結合~
  • クリーンアーキテクチャの本質を考える|yonekubo

    はじめにアーキテクチャを突き詰める Online Conferenceの公募LT選手権で、「やってみてわかった クリーンアーキテクチャの勘所」というタイトルでトークをしました。LTということで、具体的な技術面でのメリットや、改善すべき点などについて話しました。(登壇資料はこちら) 稿では、少し視座を上げて、結局クリーンアーキテクチャ(以下、CAと表記)は一体何なのかということについて、現在の筆者の考えを整理したいと思います。 あの図話が手っ取り早いので、例の同心円の図をまずは引用します。 図の出典: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.htmlCAでは、レイヤー(層)間の依存関係は同心円の外側から内側へ向く方向のみ許容されます。内側にあるコードは上位レベルの方針を表すものであり、外

    クリーンアーキテクチャの本質を考える|yonekubo
    JGEEM
    JGEEM 2024/05/24
    いいね "Do CAではなくBe CAを目指しましょう" モジュールが結合するさまをヘキサゴナルがアダプタを介してつながる図も直感的で良い
  • ビジネスの構造をアーキテクチャに落とし込みソフトウェアに可変性を注入する

    20240522 Findy主催「アーキテクチャを突き詰める」登壇資料 イベントストーミング、ドメインモデリング、CQRS+Event Sourcing

    ビジネスの構造をアーキテクチャに落とし込みソフトウェアに可変性を注入する
  • やってみてわかった クリーンアーキテクチャの勘所 | ドクセル

    スライド概要 Findyさんのイベント「アーキテクチャを突き詰める Online Conference」のLT登壇資料です。

    やってみてわかった クリーンアーキテクチャの勘所 | ドクセル
  • AI を活用したソフトウェア開発のための個人的ガイド - Sun wood AI labs.2

    https://www.reddit.com/r/LocalLLaMA/comments/1cvw3s5/my_personal_guide_for_developing_software_with_ai/?rdt=40405 はじめに 私は個人プロジェクトでコードを書く際、特に自動化のためのものを書く際には、AI を活用しています。この点について、人によって意見が分かれるようです。同じように AI を使っている人もいれば、AI が良いコードを書くことは不可能だと考える人もいます。私の分野の専門家の間でも同様の考え方に遭遇し、AI の使い方が人によって異なるのかもしれないと気づきました。 私自身のバックグラウンドですが、私は開発マネージャーであり、業界で長年の経験を積み、大学院でもソフトウェア開発を学んできました。ですので、このガイドは素人ではなく、大規模システムの構築と運用に関するかなり

    AI を活用したソフトウェア開発のための個人的ガイド - Sun wood AI labs.2
  • SOLID原則完全に理解した!になるための本

    SOLID原則を学び、完全に理解した!になるための

    SOLID原則完全に理解した!になるための本
    JGEEM
    JGEEM 2024/05/01
    簡潔で読みやすい。こういうものの読み合わせから始めると良さそう。知ってるつもりが適当だったことも恥をかかずに修正できる
  • 単体テストを書かない技術 #phpcon_odawara

    PHPカンファレンス小田原2024での発表資料です https://fortee.jp/phpconodawara-2024/proposal/4d39c7ef-058c-4648-b1d7-5510497e0d81

    単体テストを書かない技術 #phpcon_odawara
    JGEEM
    JGEEM 2024/04/20
    良い。"自分自身が何者であるかを熟知したコードを追及する" コードの目的を突き詰めなければならないし、プロダクトへの理解とSRPに沿ったモジュール化となり、データ抽象と型検査でテストを置換していきたい
  • モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み|ハイクラス転職・求人情報サイト AMBI(アンビ)

    モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み 大規模なソフトウェア開発においてモノリシックかマイクロサービスかというアーキテクチャの議論がありますが、近年は第3の選択肢としてモジュラモノリスが話題になっています。いったんマイクロサービス化に舵を切りながら現在はモジュラモノリスに取り組むアソビューの考え方や進め方について、VPoEの兼平大資(disc99)さんによる寄稿です。 アソビューでは、現在の事業状況にマッチしていることや過去の経緯から、モジュラモノリスを中心としたアーキテクチャを採用しています。 今回は、なぜその選択をし、どのように実現しているかを紹介します。 記事の前半では、アソビューが提供する事業や、アーキテクチャに対する考え方、開発組織の歩みなどを説明します。 中盤以降は、アソビューにおけるモジュラモノリスへの取

    モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み|ハイクラス転職・求人情報サイト AMBI(アンビ)
  • 設計の知識と技能で駆動するソフトウェア開発

    Object Oriented Conference 2024 登壇の機会をいただいたので、ここ数年、設計について考えていることを、言語化してみました。 はじめに 設計と開発プロセスの関係性 ソフトウェア設計の知識と技能 ① ソフトウェア設計の基礎知識 a. 基課題 b…

    設計の知識と技能で駆動するソフトウェア開発
  • Software Designドメイン駆動設計に参加 - Qiita

    前書き 業後に以下のDDDイベントに参加してきた。 その議事録とアウトプットとしてここに残す。 画像の上2つが自分が書いたものである。 ドメイン駆動設計概要とユビキタス言語 コンテキストマップとコアドメイン 全体像を俯瞰したコンテキストマップ→その上でのどこにモデリングコストかけるか策定。コアドメインの時間経過に伴う変化(動き)、境界の位置含めて。詳細での検証の上で演繹的に前提となるマクロな境界の位置を修正。 それに対して参加者の方から、 ①コンテキストマップからのコアドメインの定義という順番(トップダウン寄り) ②コアドメイン先に定義してからのコンテキストマップ作成という順番(ボトムアップ寄り) どちらなのか? という良い質問があった。 どっちかというとコアドメインを最初に特定して、それを支える業務サービスとして他のドメインがあるため、わりとボトムアップ式にコンテキストマップ作成という話

    Software Designドメイン駆動設計に参加 - Qiita
    JGEEM
    JGEEM 2024/03/15
    コアドメインの見つけ方が言語化されていて良い。コアドメイン特定→周囲との関係を図示も同意。「BAでの概念モデリングをAA層にてイベントソーシングで相似形に実装すること」を再読しながら噛み締めたい
  • サーバーレスマイクロサービスを構築するための設計アプローチの比較 | Amazon Web Services

    Amazon Web Services ブログ サーバーレスマイクロサービスを構築するための設計アプローチの比較 AWS Lambda でワークロードを設計すると、コードレベルでもインフラレベルでも表現できるモジュール性のために、開発者に疑問が生じます。また、コードを実行するためにサーバーレスを使用するには、基盤となる機能コンポーネントからビジネスロジックを抽出するためのさらなる検討が必要です。この意図的な関心の分離により、堅牢なモジュール性が保証され、進化的なアーキテクチャへの道が開かれます。 この投稿は同期ワークロードに焦点を当てていますが、他のワークロードのタイプでも同様の考慮が当てはまります。API の境界を特定し、コンシューマと API について擦り合わせた後、その境界と関連するアーキテクチャを構成します。 Lambda 関数を使用して API を構成する最も一般的な 2 つの方

    サーバーレスマイクロサービスを構築するための設計アプローチの比較 | Amazon Web Services
    JGEEM
    JGEEM 2024/03/15
    この比較表は良いな。が、Lambda-lithの利点にある「凝縮度の向上」「メンテナンスの簡素化」は違和感。目的の異なる似た処理を集めてるように見えて、不幸の始まりを予感させる
  • モジュール化 | 神戸大学MBA

    原 拓志 現代の製品開発・生産のマネジメントにおいて、理解しておくべき概念の1つが「モジュール化」である。「モジュール化」とは、全体システムを、いくつかの下位システム(モジュール)にわけ、モジュール間のインターフェイスを標準化することによって、システム全体の構造を変革することなく、モジュールの取替や組換えによって、システムの機能を維持ないし変更できるようにする方法である。システムがハードウェアでもソフトウェアでも問わないし、比喩的に社会システムに適用することも可能だ。大量生産方式を特徴づける部品の互換化とも共通点があるが、互換部品が通常は同じ機能のものを指すのに対し、モジュール化の場合は、異なる機能のものも組換え可能にし、全体システムの機能を変革することも狙いにするところが相違する。 「モジュール化」のメリットの1つは、全体システムの変革に際して、変革を局所化することにより変革に伴う効率の

    モジュール化 | 神戸大学MBA
    JGEEM
    JGEEM 2024/03/09
    モジュール化についてとても端的に説明されている良い文書。こういう認識を基にどこまでやる?どうしたらいい?という議論に持ち込みたいのだけど、、そも「設計」という行為について意見交換する土壌がないんだよな
  • 【ソフトウェア設計】モジュールをどう分割するのか?

    はじめに 前々回や、前回に引き続き、ソフトウェア設計の指針に関する話をしたいと思います。 関数やクラス、そしてサービスなどシステムの塊の単位をモジュールと呼び、モジュールを作る事で、認知負荷を下げ複雑性と戦うという話をしてきました。では、モジュールは「いつ」分割するのが良いでしょうか? また、他にも共通モジュールを不用意に作ってしまって苦労した人も多いのでは無いでしょうか? 今回はそのあたりの話をしていきます。 TL;DR 以下があればモジュール設計を見直す 単純な要件/普段の利用に対して、タイプ量や約束事が多い 共通モジュールが「使われ方」に依存する モジュールの役割を一言で説明できない コード管理や性能/データ整合性など利用に際してのペナルティが高い 分割 is NOT 正義 - FizzBuzz Enterprise Edition 複雑性を排除するためにモジュール分割をすることは重

    【ソフトウェア設計】モジュールをどう分割するのか?
    JGEEM
    JGEEM 2024/03/05
  • マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング

    この記事はMERPAY TECH OPENNESS MONTHの15日目の記事です。 こんにちは。メルペイのPayment PlatformチームでPaymentServiceの開発を担当するエンジニアの @foghost です。 メルペイではマイクロサービスのアーキテクチャで決済システムを開発しています。その中でPaymentServiceは決済トランザクション管理の基盤サービスとして、下位層のサービス(外部サービスも含め)が提供する各種決済手段を利用して、上位層のサービス(メルカリ、NFC,コード払いなど)に必要な決済フローを共通APIとして提供しています。PaymentServiceが提供する決済処理に複数のサービスを跨いでお金の動きを正確に管理する必要があるので、作り始めた頃から決済トランザクション管理を最も重要な課題として、サービスを跨いでもデータの整合性が取れる仕組みを作ってき

    マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング
    JGEEM
    JGEEM 2024/02/10
    結果整合性を基本に据えて、強い整合性が必要な部分を最小限にするには?ってアプローチで考えたい。"決済処理を実装するとき、正常処理よりも異常処理のほうが数倍難しい"←ほんこれな
  • 7つの設計原則とオブジェクト指向プログラミング - ソフトウェア設計を考える

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

    7つの設計原則とオブジェクト指向プログラミング - ソフトウェア設計を考える
    JGEEM
    JGEEM 2024/02/10
    ブクマしてなくてむしろこっちが驚いた
  • Big Ball Of Mud(大きな泥だんご)は依然最も人気あるソフトウェア設計手法

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    Big Ball Of Mud(大きな泥だんご)は依然最も人気あるソフトウェア設計手法
    JGEEM
    JGEEM 2024/02/10
    2010年の文書だけど今も状況は変わってないか ”泥団子が発生する理由は使い捨てのコード/段階的な成長/働かせ続けること/コピペによる転移” アジャイルも良いが泥団子を小さくするのはプロセスでなく開発者自身
  • DDDにおけるドメイン層オブジェクト設計の基本方針[ドメイン駆動設計] - little hands' lab

    株式会社ログラスの松岡(@little_hand_s)です。 ドメイン層のオブジェクトを設計する際に、重要な基方針があります。 ドメインモデルの知識を対応するオブジェクトに書く 常に正しいインスタンスしか存在させない この2つを守ると、非常に保守性の高いコードにすることができます。 以下、詳細に解説します。 ドメインモデルの知識を対応するオブジェクトに書く ドメイン知識(ルール/制約)を表現する実装を、ドメイン層のオブジェクトに寄せていきます。 この判断は、「ドメインモデル図に書かれた吹き出しの内容が、どの層で実装されているか」という基準に基づき行います。 この基準はコード設計の指針として非常に役立ちます。 設計の良し悪しというのはさまざまな基準があるため、レビューをしていてもいわゆる「俺の考えた最強の設計」同士が戦ってしまうことがあります。 しかし、「ドメイン知識はドメイン層に書く」と

    DDDにおけるドメイン層オブジェクト設計の基本方針[ドメイン駆動設計] - little hands' lab
    JGEEM
    JGEEM 2024/01/27
    ドメインモデルの知識を対応するオブジェクトに書く/常に正しいインスタンスしか存在させない。常に正しいインスタンスとするには、生成条件の強制/ミューテーション条件の強制が必要。