タグ

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

  • 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(アンビ)
  • 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(大きな泥だんご)は依然最も人気あるソフトウェア設計手法

    Rustが再評価される:エコシステムの現状と落とし穴 In this article, we share findings and insights about the Rust community and ecosystem and elaborate on the peculiarities and pitfalls of starting new projects with Rust or migrating to Rust from othe...

    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
    ドメインモデルの知識を対応するオブジェクトに書く/常に正しいインスタンスしか存在させない。常に正しいインスタンスとするには、生成条件の強制/ミューテーション条件の強制が必要。
  • 「影響範囲の考慮漏れ」によるソフトウェアトラブルの多発はビジネス継続性に対する危険信号|mtx2s

    リリースするたびに「影響範囲の考慮漏れ」によるトラブルを起こす。こういう症状は、既存のソフトウェアシステムに追加開発を繰り返す組織によく見られるのではないかと感じます。コードやシステムの変更が影響を及ぼす箇所を見逃してしまい、未修正な箇所が残されたまま番リリースされたために発生するトラブルです。 このようなトラブルが頻発すれば、関係者らは不満を感じます。エンジニアたちの能力に不信感を抱くかもしれません。 しかし、不満の矛先をエンジニアに向けたところで問題が解決することはありません。そもそも原因を見誤っているからです。根的な原因は、もっと奥深くにあります。 影響範囲の考慮漏れの多発は、ソフトウェアシステムが大きな問題を抱えていることを知らせるサインです。このサインを見逃して表面的な対策ばかりを続けていると、症状が良くなるどころか、かえって悪化し続けることになるでしょう。 問題/原因の3層

    「影響範囲の考慮漏れ」によるソフトウェアトラブルの多発はビジネス継続性に対する危険信号|mtx2s
    JGEEM
    JGEEM 2024/01/23
    心当たりがありすぎて胸が痛い。その状況を指摘して、改善の道を示してもなお内部品質を無視して「今はスピードを優先して」とのたまうマネージャーとそれを容認する組織に何をか言わんや
  • 保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発、その全体像 ~Software Design 2022年3月号「そろそろはじめるテスト駆動開発」より | gihyo.jp

    保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発⁠⁠、その全体像 ~Software Design 2022年3月号「そろそろはじめるテスト駆動開発」より 今回、Software Design 2022年3月号 第2特集「そろそろはじめるテスト駆動開発 JavaScriptでテストファーストに挑戦」の第1章「保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発、その全体像」をサイトに掲載します。第2章以降については、誌『Software Design 2022年3月号』電子版(Gihyo Digital Publishing、Amazon Kindle)をご購読いただければ幸いです。 第1章では、混同されることの多い自動テスト関係の概念を、自動テスト、テストファースト、テスト駆動開発の3つの段階に分け、それぞれの効果や注意点を説明します。ソフ

    保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発、その全体像 ~Software Design 2022年3月号「そろそろはじめるテスト駆動開発」より | gihyo.jp
    JGEEM
    JGEEM 2024/01/16
    "保守性は(略)今では前進力、改善力、推進力の源です。自動テストはそのような保守性を支える柱です。" この考え方を開発部門はもちろん、業務や企画、営業部門に至るまで認知している世界を目指したい
  • 実録レガシーコード改善 / Working with Legacy Code: the True Record

    2024/01/15(月) 12:00 〜 13:00 t-wadaさんが後世に残したい、実録レガシーコード改善 https://findy.connpass.com/event/304101/ テストコードが無いコードを引き継いだところからはじまる、実際に2018年に行った受託開発案件のエピソードとコードをプロダクトオーナー(引き継ぎ前のコードを書いた人)の許可を得て使用しています。登場するコードは全て物、登場するデータは講演用の架空のものです。

    実録レガシーコード改善 / Working with Legacy Code: the True Record
    JGEEM
    JGEEM 2024/01/15
    いつもながらためになる。というかもはや読んでて面白いしエキサイトするまである。実コード使ったライブコーディングもさぞ、、とりあえず1/22が楽しみ
  • 複数サービス間でのデータの整合性維持に向けたSagaの実装 - NTT Communications Engineers' Blog

    マイクロサービスアーキテクチャにおいては、個々が独立に選定したデータベースを持つ複数のサービスにまたがって、データの整合性を維持する必要があります。 そのための方法として、Sagaパターンと呼ばれる設計方法がありますが、Sagaでは分離性が欠如しておりLost Update等の異常が発生しかねません。 そこで記事では、Sagaの分離性を高めるための実装におけるTipsを解説します。 目次 目次 はじめに 複数サービス間での整合性維持における課題 Sagaパターン Sagaを構成するトランザクション Sagaによって実現される安全性 原子性(Atomicity) 整合性(Consistency) 分離性(Isolation) 永続性(Durability) 異常を防止/軽減する実装 分離性の欠如が引き起こす異常 分離性の欠如への対策 Semantic Lock Commutative Up

    複数サービス間でのデータの整合性維持に向けたSagaの実装 - NTT Communications Engineers' Blog
  • CQRSの一貫性・可用性・スケーラビリティについて|かとじゅん(j5ik2o)

    CQRS(Command Query Responsibility Segregation、コマンド・クエリー責任分離)は、現代のアプリケーション設計において重要な役割を果たしているが、今回はよく議論になる一貫性・可用性・スケーラビリティについて書いてみよう。文章のみの説明なので、非常にイメージしづらいかもしれないけど。 一貫性と可用性の評価軸CQRSが一貫性と可用性を重要な評価軸として採用する理由は、CAP定理に基づいている。分散システムでは、ネットワークの分断や障害が発生した場合、一貫性と可用性の間でトレードオフが生じることが避けられない。CQRSはこのトレードオフを巧みに活用し、書き込みモデルで一貫性を、読み込みモデルで可用性を重視することで、最適なバランスを見つけることを目指している。 一貫性への影響イベントソーシングを伴わないシンプルなCQRSでは、非CQRSベースのシステムと同

    CQRSの一貫性・可用性・スケーラビリティについて|かとじゅん(j5ik2o)
  • CQRSのコストとトレードオフについて|かとじゅん(j5ik2o)

    どんな強力なツールでもそうであるように、CQRS(Command Query Responsibility Segregation)は無料で使えるわけではない。CQRSにはコスト(手間という意味)が伴うが、その利点も多い。 従来のアーキテクチャより複雑だと批判されることもあるCQRS/ES(Event Sourcing)だが、実際にはシンプルに実装できる部分もある。 CQRSにおけるモデルの分割CQRSではシステムを分割し、書き込みモデルと読み込みモデルを独立させる。例えば、ホテルの部屋を予約するシステムを考えると、部屋を予約する・宿泊人数を変更する・予約をキャンセルするなどの行為は書き込みモデル(集約ルート)に該当し、顧客別予約・ホテル別予約などの情報は読み込みモデルになる。この分割により、各オブジェクトはより単純化されるが、システム全体としての複雑さは増す。これは、CQRSにおける重要

    CQRSのコストとトレードオフについて|かとじゅん(j5ik2o)
  • 設計書を書かない設計で開発効率を向上させた話 - Tabelog Tech Blog

    この記事は べログアドベントカレンダー2023 の23日目の記事です🎅🎄 こんにちは。べログシステム技術部 仕入チームの@shohei-yです。 今回は、新規事業の「べログ仕入」プロダクト開発において所謂「設計書」を書かない設計に挑戦して開発効率を向上させた話を書きます。 (結局「書くの?書かないの?どっちなんだい!」と感じた人は、ぜひ読み進めてください。) 所属している仕入チームについてはこちらの記事をご覧ください。 目次 なぜ設計書を書かない設計に挑戦したのか 設計書を書かないチーム 設計書を書かないことによる問題 1. チーム協力の課題 2. ソースコードの複雑化 3. チーム変動に関わる問題 設計工程導入のきっかけ 設計書を書かない挑戦の背景 設計書を書かない設計 フロントエンド・バックエンドのインターフェースの明確化 ソースコードのスリム化対策 設計のレビュー方法

    設計書を書かない設計で開発効率を向上させた話 - Tabelog Tech Blog
    JGEEM
    JGEEM 2023/12/30
    ソフトウェアとしての構造化とモジュール間の契約を明確化しつつ、設計情報をソースに含むようにしたらCopilotの支援を受けられたと。参考にしたい
  • アーキテクチャの進化はドメインイベントが起点になる - KAKEHASHI Tech Blog

    こちらの記事はカケハシ Advent Calendar 2023 Part2の24日目の記事になります。 adventar.org はじめに 反復的な開発は、変更容易性の高いソフトウェアが不可欠です。ソフトウェア開発の経験がある方なら、デリバリ後の洞察や市場環境の変化から、新しい機能の追加やアーキテクチャの進化の必要性に直面したことが一度はあるでしょう。 私自身、要求分析手法やSOLID原則等の技法を取り入れ、変更容易性に対応する多くのプロジェクトに参加しました。しかし、どれだけ優れた手法や技法を持っていても、変更が難しい要求が出てくることは避けられません。その際、「過去の出来事」を正確に記録していれば、後から見返して問題解決が容易だったと感じることがよくあります。 ドメイン駆動設計(DDD)では、「過去に起こった出来事」を表現するドメインモデルを「ドメインイベント」と呼びます。変更容易性

    アーキテクチャの進化はドメインイベントが起点になる - KAKEHASHI Tech Blog
    JGEEM
    JGEEM 2023/12/25
    ちょうど悩んでるところだったので非常に助かる。感謝。とりあえず熟読しつつチームにも布教しよう。今年のアドベントカレンダーはDDD関連が豊作で嬉しい
  • シフトレフトがなぜ効果的なのか「抽象度」から考える

    この記事は 株式会社ログラス Productチーム Advent Calendar 2023 18日目の記事です。 はじめに ログラスの龍島(@hryushm)です。 ソフトウェア開発において、「シフトレフト」すなわち開発の早い段階でテスト計画を立て、実施していくことが全体的なコスト削減や価値提供の早期化につながるとよく言われています。 この記事では、シフトレフトによってもたらされる効果をログラスでの実例を用いて紹介した上で、なぜ効果が出るのか?を「抽象度」というキーワードから紐解いてみようと思います。 記事ではスクラム開発においてPBIを完了させる中でシフトレフトしていくことを念頭に書いていきますが、ソフトウェア開発の任意のタイミングにおいて適用できる概念だと考えています。 テスト設計を実装前にやることの有用性 まずシフトレフトによって何が起こるのか?を考えます。PBIに書かれた受け入

    シフトレフトがなぜ効果的なのか「抽象度」から考える
    JGEEM
    JGEEM 2023/12/22
    シフトレフトは大賛成だし、その効果も異論ないけど、抽象度として「仕様>テストケース>実装」を許容していぃんだろうか。確かにすべてを仕様として明らかにできないけど、仕様にない実装の根拠が必要なのでは