Architecture Bookmarks 2020
2020年にArchitecture系の読んだ記事とかのなかでメモしておきたいもののまとめ。
目次
Software/System Architecture
- 3万同接で苦しんでたのに30万同接が楽勝になった話
- Create an RSS feed application with embedded article content
- Connecting the Dots at Uber with a High Level Architecture
- GMOリサーチのシステム概要について説明します
- 分散キューという名の苦しみ
- Scalable Web Architectures Concepts & Design
- モノレポについての誤解 - Misconceptions about Monorepos: Monorepo != Monolith を翻訳しました
- What a typical 100% Serverless Architecture looks like in AWS!
- ZOZOSUITからZOZOMATへ - CQRSによる解決アプローチ
- The Citadel Architecture at AppSignal
- 「番号」設計のあるべき姿 〜 年金番号漏洩事件によせて
- 5 Major Software Architecture Patterns - DZone Microservices
- Software Architecture: The 5 Patterns You Need to Know
- オブジェクト指向設計原則とは - Qiita
- How to Design a Web Application: Software Architecture 101
- Beyond Senior Engineer: Part Two
- Deconstructing the Monolith: Designing Software that Maximizes Developer Productivity
- 金融を"サービス"として再発明するための技術スタック
- ソフトウェアアーキテクチャと設計 - InfoQトレンドレポート、2020年4月
- Using Events to build evolutionary architectures
- Scaling Applications Part 1 — Introduction
- Introduction To Systems Design
- How to Build Scalable and Highly Available Web Applications?
- Goのインターフェース抽象度を美しく保つ為の思考 - 好奇心に殺される。
- ご主人様、小難しいDDDやクリーンアーキテクチャはお忘れになって、"削除しやすい設計"から始められてはいかが? - Qiita
- 「ビジネスロジック」とは何か、どう実装するのか - Qiita
- リアクティブマイクロサービス入門(1/2)- 概念編
- リアクティブマイクロサービス入門(2/2)- 実現編
- What we talk about when we talk about “legacy” software
- 理解して拡げる分散システムの基礎知識
- 7つの設計原則とオブジェクト指向プログラミング
- [#JTF2020 解説版]理解して拡げる 分散システムの基礎知識 - Qiita
- How Shopify Reduced Storefront Response Times with a Rewrite
- リアクティブアーキテクチャ基礎講座
- 純粋培養GraphQL / Pure GraphQL Architecture
- Master System Design For Your Interviews Or Your Web Startup - 8bitmen.com
- アーキテクチャ設計における垂直思考と水平思考 - kawasima
- モノリシックな大規模アプリを運用する技術-サービスを"分割しない"メリットをSansanの実例に学ぶ #エンジニアHub - エンジニアHub|若手Webエンジニアのキャリアを考える!
- 継承とコンポジションをどう使い分けるか
- The Must-Know Clean Code Principles
- Vending Machine design — A State design pattern approach
- EventStorming SoftwareDesign as a Cooperative Game
- Scalable Web Architectures Concepts & Design
- Kubernetesで学ぶ分散システムデザインパターン
- Designing Distributed Systems を読んだ
- From Majestic Monolith to Decoupled Service Architecture
- Best Practices for Designing Developer-Friendly REST APIs
- CQRS/Event Sourcingを学ぶための教材(2020年版)
- Repositoryによる抽象化の理想と現実/Ideal and reality of abstraction by Repository
- CQRS vs Specification pattern
- 継承とコンポジションをどう使い分けるか
- Association, Aggregation, Compositionの違い - Qiita
- 良いコードの書き方 - Qiita
- インタフェースの命名パターンから知るインタフェースの役割 - Qiita
- 【C#】インターフェイスの利点が理解できない人は「インターフェイスには3つのタイプがある」ことを理解しよう - Qiita
- HTTP クライアントを作ろうとして学ぶ、使いやすいインタフェース / #GoCon_Sendai 2020
- Modern-Day Architecture Design Patterns for Software Professionals
- Distributed Systems: When you should build them, and how to scale. A step-by-step guide.
- Building a 24/7/365 Walmart-scale Java application
- モジュラモノリスの実現方法 - まっちゅーのチラ裏
- 3 CQRS Architectures that Every Software Architect Should Know
- SOLID Design Principles - The Simplest Explanation.
- 3 Domain-Centric Architectures Every Software Developer Should Know
- Comparing API Architectural Styles: SOAP vs REST vs GraphQL vs RPC
- GoのWebアプリ開発でフラットパッケージ構成にしたら良かった話
- 単一責任原則で無責任な多目的クラスを爆殺する - Qiita
- 設計要件をギッチギチに詰めたValueObjectで低凝集クラスを爆殺する - Qiita
- 関心の分離を意識した名前設計で巨大クラスを爆殺する - Qiita
- ADOP (Application Domain Others Pattern)
- アーキテクチャ 【まとめ】 -マイクロサービス、ミニサービス、モジュラーモノリス、モノリシックアーキテクチャを並べて比べてみました- - RAKUS Developers Blog | ラクス エンジニアブログ
- Miniservice: Pragmatic Microservices Architecture
- 【ZOZOTOWNマイクロサービス化】API Gatewayを自社開発したノウハウ大公開! - ZOZO Technologies TECH BLOG
- 決済システムを設計するときに忘れてはならないたった1つの大切なこと
- プログラムの「アーキテクチャに関するドキュメント」は面倒でも書くべき、ではどのように書くべきか?
- State Watch
- 大規模Email配信システムのクラウドジャーニー · DeNA Engineers' Blog
- https://slack.engineering/role-management-at-slack/?utm_source=rss&utm_medium=rss&utm_campaign=role-management-at-slack
- Did I Break You? Reverse Dependency Verification
- 技術選定/アーキテクチャ設計で後悔しないためのガイドライン - Qiita
- 単一責任の原則(Single responsibility principle)について、もう一度考える | オブジェクトの広場
- Rust で Web アプリケーションはどこまで開発できるのか
- https://www.wantedly.com/companies/wantedly/post_articles/327621
- https://www.pospome.work/entry/2021/05/29/152921
- ソフトウェア設計原則は変更容易性に通ず - Shin x Blog
- ソフトウェア設計についての原則や法則についてまとめてみた
How to Design a Web Application: Software Architecture 101
- ソフトウェアアーキテクチャは主要なコンポーネントの関係、連携方法を表し、後で設計変更やリファクタリング避ける為に慎重に検討する必要がある
- アーキテクチャを選択すると、パフォーマンス、フォールトトレランス、スケーラビリティ、および信頼性への対処方法が決まる
- ソフトウェアデザインはモジュールの責務、クラスのスコープなどのコードレベルの設計を担う
- Software Architecture Patterns
- Client-server
- クライアントはリクエストをサーバに送信し、サーバーがレスポンスを返す
- 多くのWebサイトやWebアプリケーションがclient-serverアーキテクチャで構築されている
- Peer-to-peer
- ノードと呼ばれるコンピューターが中央サーバーを介さずに、相互に通信できるネットワーク
- 中央サーバーが存在しないことは、単一障害点が存在しないことを意味する
- 一部のコンピューター/ノードがダウンした場合でも、ネットワークと通信はアップのまま
- ブロックチェーンの基礎
- Model-View-Controller (MVC)
- アプリケーションロジックを3つのコンポーネントに分割するアーキテクチャ
- Models
- どのようにdatabseにデータを保存するかを定義する
- Views
- GUIなどのユーザーの目に触れる箇所を担う
- Controllers
- ModelとViewのインターフェースとして振舞う
- デスクトップアプリケーションだけでなく、モバイルおよびWebアプリケーションにも使用される
- Microservices
- 機能/タスクが個別のモジュール/コードベースに分割され、それぞれが連携して大規模なサービス全体を形成する
- モノリシックアーキテクチャと比べて、メンテナンスや開発、テスト、デプロイ等で優れている
- Event-driven
- Non-blockingアーキテクチャはReactive、もしくはEvent Drivenアーキテクチャとも呼ばれる
- Event DrivenアーキテクチャはモダンWebアプリケーション開発では非常にポピュラー
- 最小限のリソースの消費で、多数の同時コネクションを捌くことができる
- モダンアプリケーションはスケールのために非同期で動作する必要がある
- Layered
- 特定の抽象化レベルを元にレイヤーを構築する
- 各レイヤーは上位のレイヤーに機能を提供する
- Presentation layer
- Application layer
- Business logic layer
- Data access layer
- Hexagona
- 3つのコンポねーントで構成される
- Ports
- Adapters
- Domain
- アプリケーションのコンポーネントを疎結合にして、テストを容易にすることにフォーカスする
- ビジネスロジックとして、Domainをコアする
- 外のレイヤーは、PortsとAdpterが存在する
- Horizontal or Vertical Scaling
- 一貫した最低限のトラフィックを捌く場合(内部ツールなど)は、分散環境でホストする必要はなく単一サーバーで十分
- その場合は垂直スケーリングを選択する
- アプリケーションが公開されており、トラフィックが将来爆発的の増加することが予想される場合は、高可用性と水平スケーラビリティの両方が重要
- クラウドにデプロイし、水平方向のスケーラビリティを念頭に置く
- Monolith or Microservice
- When to use monolithic architecture
- シンプルで限られたトラフィックを捌けば良い場合はモノリシックアーキテクチャが最適
- 長期にわたって、ユーザーベースとトラフィックが指数関数的に増加しないことが決まってる場合など
- モノリシックアーキテクチャから始めて、後で分散マイクロサービスアーキテクチャにスケールアウトすることを決定する場合もある
- 必要に応じて段階的にアプリケーションの複雑さに対処できる
- When to use microservice architecture
- 複雑なユースケースや将来的なトラフィックの増加が見込まれる場合に適している
- 典型的なソーシャルネットワーキングアプリケーションの場合は↓のようなコンポーネントを持つ
- messaging
- real-time chat
- live video streaming
- image uploads
- liking
- sharing features
- このケースでは、単一責任と関心の分離の原則に従って。各コンポーネントは別々に開発される
- NoSQL or SQL?
- When to pick a SQL database?
- Transactions and Data Consistency
- お金や数字に関係するトランザクションが必要、またはACIDに準拠する必要がある場合、データの一貫性は非常に重要であり、RDBはトランザクションとデータの一貫性に関して優れている
- Storing Relationships
- relationshipsを表現しなければいけない場合
- 友達とかいいねとか
- When to pick a NoSQL database
- Handling a large number of read-write operations
- 素早くスケールする必要がある場合
- 大量のread-write操作や大量のデータを処理する場合
- すぐにノードを追加できるため、より多くの同時トラフィックと大量のデータを最小限の遅延で処理できる
- Running data analytics
- 大量のデータに対応する必要があるデータ分析のユースケースにも最適
- ソフトウェアアーキテクチャに慣れる最良の方法の1つは、独自のWebアプリケーションを設計すること
- https://www.educative.io/courses/web-application-software-architecture-101
API
- GraphQL で変わったこと・変わらなかったこと / graphql changing and unchanging
- PUTとPATCHの違いが気になった
- いまさらだけどgRPCに入門したので分かりやすくまとめてみた
- Best Practices for Versioning REST APIs
- The future of API design: The orchestration layer
- GraphQLサーバを作る苦しみと解決手法
- GraphQLの特徴を分解する ~API インターフェース・Universal BFF・API Gateway~ - Qiita
- HTTP検索条件、GETにするか?POSTにするか? | フューチャー技術ブログ
- GraphQL IDE の "GraphiQL" をカスタマイズして、開発ツールとして活用する - Hatena Developer Blog
Microservices
- マイクロサービスにおける決済トランザクション管理
- STOP!! You don’t need Microservices.
- Software Design with Microservice Architecture
- 開発チームを苦しめるマイクロサービス(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社
- Why we failed implementing CQRS in Microservice architecture.
- モノリスからマイクロサービスへ - サービスメッシュを使ったSnapのマイグレーション
- マルチランタイム・マイクロサービスアーキテクチャ
- マイクロサービスと「Red Hat OpenShift Container Platform with Runtimes」の基礎知識
- How to Design a Successful Microservices Engineering Culture
- Microservices Architecture Tutorial: all you need to get started
- Preparation to migrate a domain from a monolith into its dedicated service
- 11 Patterns to Secure Microservice Architectures - DZone Microservices
- Microservices Implementation: Software Stacks and Concepts - DZone Microservices
- Should I use microservices?
- The Rise of Service Mesh Architecture
- The Dark Side of Microservices
- Microservice Integration — SAGA Pattern
- gRPCでインターフェースを再整理してからサービスを分割─freeeの段階的なマイクロサービス戦略
- マイクロサービス/API時代のフロントエンド開発
- 「マイクロサービスに出遅れた」ところは、先人から何を学べるか
- マイクロサービスの次に来るものは何か? Biligin Ibryam氏の提唱するマルチランタイム・マイクロサービス - QCon Londonの講演より
- Your Distributed Monoliths are secretly plotting against you
- Scaling Microservices with Message Queues, Spring Boot and Kubernetes
- Istioがマイクロサービスからモノリシックなアプリに変化。その背景とは
- Microservices Authentication and Authorization Solutions
- Communication Over Microservices
- Securing modern API- and microservices-based apps by design
- Microservices における認証と認可の設計パターン
- サービスティアを設定して、マイクロサービスの障害を防ぐ
- Are Microservices the Future of Business Applications?
- 5 Best Courses to learn Spring Cloud and Microservices in 2020
- State of Microfrontends
- You're not going to do Microservices
- Splitting up shared databases
- 20200325 AWS Black Belt Online Seminar AWSにおけるマイクロサービスアーキテクチャの設計パターン
- サイドカー パターン
- マイクロサービスでのSidecarパターンとは何か
- モノリスの分解において、マイクロサービスは必然ではない - QCon LondonにおけるSam Newman氏の講演より
- APIオーケストレーション層
- Evolution of Microservices
- Zero to Software/Application Architect - Learning Track - 8bitmen.com
- Scaling Your Web Application
- Anti-patterns of Web API's
- Refactoring From Trash to SOLID
- Microservices分割大全 - kawasima
- WSO2 API MicroGateway deployment patterns
- マイクロサービスを連携してみよう
- Game of Microservices - DZone Microservices
- Are Aggregate-Oriented Microservices a Dead End?
- What, Why, When: Microservices?
- Design patterns for microservices
- Istio as an Example of When Not to Do Microservices
- Microservices Design - API Gateway Pattern
- 10 Microservices Best Practices for the Optimal Architecture Design
- Microservices: The Right Solution for You?
- Microservices における認証と認可の設計パターン
- マイクロサービス設計原則: SOLIDではなくIDEALS
- モノリス分割はこうやる!「How to break a Monolith into Microservices」を読んだ - kakakakakku blog
- 認証と認可と課金とコアドメインを分離したシステムは勝てるという話 - まっちゅーのチラ裏
- マイクロサービスにおける決済トランザクション管理
- サービス分割に備えたモノリス(モジュラーモノリスとかアグリゲートとか) - RAKUS Developers Blog | ラクス エンジニアブログ
- Microservice Architecture - Communication & Design Patterns
- Microservices における認証と認可の設計パターン
- Microservice Architecture and its 10 Most Important Design Patterns
- Effective Microservices: 10 Best Practices
- どのツールを選択するかではなく何を解決するかが大事 マイクロサービスの"光"と"闇"
- Data Gateways in the Cloud Native Era
- Code review checklist for distributed systems | Kislay Verma
- マイクロサービス設計原則: SOLIDではなくIDEALS
- Rebuilding and Migrating a Session Management System with Zero Downtime | DoorDash Engineering Blog
- 「マイクロサービス化は考古学」メルペイで技術負債と向き合い続けたBackendエンジニアの話 | mercan (メルカン)
- メルペイとティアフォー共催で、認証認可テックトークイベントを開催しました #tieriv_merpay
The Rise of Service Mesh Architecture
- Service Meshとは?
- マイクロサービスアーキテクチャの内部のサービス通信をハンドルするインフラストラクチャレイヤーとして定義できる
- マイクロサービスアーキテクチャに関連する複雑さを軽減し、下記のような機能を提供できる
- Load balancing
- Service discovery
- Health checks
- Authentication
- Traffic management and routing
- Circuit breaking and failover policy
- Service Meshが必要な理由?
- マイクロサービスアーキテクチャではほとんどの場合サードパーティのライブラリまたはコンポーネントに依存して、service discovery, load balancing, circuit breaker, metrics, telemetryなどの機能を提供する
- Netlifxのような企業は、Hystrix for circuit breakers, Eureka for service discovery, Ribbon for load balancingのようにライブラリを内製している
- だがこれらのコンポーネントはアプリケーションコード内で実装する必要があり、言語によっても異なる
- 外部のコンポーネントをアップグレードしたい時は、アプリケーションを検証、更新、デプロイをする必要がある
- 密な結合はアプリケーションの複雑さを増し、問題が発生した場合にトラブルシューティングできるように、これらのコンポーネントの構成方法を開発者は理解する必要がある
- Service Meshにより、上記の複雑さをアプリケーションから切り離し、以下のような機能をサービスプロキシーで提供可能になる
- これによりアプリケーションはビジネスロジックの実装に専念できる
- マイクロサービスアーキテクチャで、5つのサービスが互いに通信をしている場合
- 各マイクロサービスで共通する実装であるconfiguration、routing、telemetry, logging, circuit breakingなどの実装を分離されたコンポーネントであるサービスプロキシーに抽象化する方が合理的
- Service Meshの導入により、責務が明確に分離される
- 問題発生時も、アプリケーションに関連するのかネットワークに関連するのかに基づいて、根本原因を簡単に特定できる
- Service Meshの実装方法?
- サービスとともにプロキシをデプロイする
- サイドカーパターン
- アプリケーションから複雑さを抽象化する
- Envoy from Lyft
- 最もポピュラーな、クラウドネイティブアプリケーションように設計されたオープンソースのプロキシー
- 他のサービスと並行して実行され、プラットフォームに依存しない形で必要な機能を提供
- 全てのトラフィックはEnvoy Proxyを通じて、各サービスに到達する
- Istioとは?
- マイクロサービスを接続、管理、保護するためのオープンプラットフォーム
- Kubernetes communityでポピュラーで広く使われている
- 現時点でのServic Meshの最良のものの1つ。基盤となるインフラストラクチャの詳細な知識がなくてもマイクロサービスを展開できる
- これから多くの組織でモノリシックなアプリケーションをマイクロサービスアーキテクチャーに移行を始める
- サービスの管理が負担になった際には、Service Meshを用いる
- アプリケーションの変更は不要で、複雑さを取り除くことができる
The Dark Side of Microservices
- Distributed Systems Are Hard
- 主に二つの点でマイクロサービスはハードとなる
- consensus
- partial failure
- Partial Failure
- モノリスアプリケーションによって処理されるHTTPリクエストの場合、リクエストを受け取ると、単一のサーバーがトランザクションを最初から最後まで処理する
- 問題がある場合、例えばソフトウェアのバグやハードウェアの故障の場合は、全体のモノリシックアプリケーションがクラッシュする
- マイクロサービスでHTTPリクエストを処理する場合は、マイクロサービスは他のマイクロサービスに新たなリクエストを送信する場合がある
- さらにその先で、別のマイクロサービスにリクエストを行う可能性もある
- それらのマイクロサービスの一つが失敗する時にどうする?
- More Moving Pieces
- Development
- Debugging
- 複数のサービスにまたがってデバッグをする必要がある
- 分散トレースツールを使う
- Jaeger
- Logging
- Splunkなどでデータを集約する必要
- Monitoring
- Nagiosのようなシンプルなサーバー上の監視ツールは、マイクロサービスを利用しているときはスケールに対応できない
- Prometheus/Datadog/Sysdig
- Deployment
- Chef/Puppetはモノリスアプリケーションのデプロイであれば十分
- マイクロサービスではKubernetesなどが必要
- Networking
- モノリスアプリケーションはシンプルなロードバランサーで処理可能
- マイクロサービスはより多くのエンドポイントが存在し、それら全てのエンドポイントでload balancing, service discovery, consistent security policyなどが必要
- service meshでこれらの問題を解決できる
- Microservices Make Sense, Sometimes
- 技術的な観点からマイクロサービスはモノリシックアプリケーションより難しい
- しかし人間的な観点から見ると、マイクロサービスは大規模組織における効率に影響を与える
- 大規模組織の異なるチームが、ソフトウェアを独立してデプロイ可能となる
- マイクロサービスのトレードオフ
- 組織の効率化 <=> 技術的な複雑さ
Microservice Integration — SAGA Pattern
- integration patternを設計するの考慮点
- Partial error handling
- 1つのマイクロサービスでリクエストが失敗した場合(local transaction)、システム全体もロールバック(compensation transaction)しなくてはならない
- Manage the situations where we need to collect data from multiple services
- マイクロサービスでは複数のマイクロサービスからデータを取得する必要がある場合、適切に統合する必要がある
- SAGAパターンとは
- マイクロサービスアーキテクチャはサービスごとのデータベースの原則により、これらのデータベースを同期する必要が生じる
- 分散トランザクションの整合性を確保するために適用できるSAGAパターン
- Choreography Based SAGA Pattern
- 各ローカルトランザクションは、ジョブが完了するとイベントを発行する
- このイベントを受信する他のローカルトランザクションは、適切な動作を実行する
- benefits
- 実装が簡単
- ローカルトランザクションの数が少ない時
- 疎結合なエンドポイント
- アジャイル組織に適している
- drawbacks
- ローカルトランザクションの数が多い時に、非常に複雑になる
- サービス間で循環依存が発生する場合がある
- Orchestration Based SAGA Pattern
- プロセス全体を調整するインテリジェントエンドポイント(オーケストレーションを実行する別のサービス)が存在
- ローカルトランザクションの1つが何らかの理由で失敗した場合、オーケストレーターは以前に実行されたトランザクションのロールバックも担当
- benefits
- 実装、メンテナンスが簡単
- ローカルトランザクションの数が劇的に増加する場合、複雑さが問題でにならない
- drawbacks
- ビジネスロジックはオーケストレーター内に実装される
DDD
- ドメイン駆動設計に15年取り組んでわかったこと 「ビジネスルール・値オブジェクト・型」が3つのキーワード ドメインロジックはドメインオブジェクトに凝集させる - Qiita
- DDDを意識しながらレイヤードアーキテクチャとGoでAPIサーバーを構築する
- Domain services vs Application services
- Chatworkのテックリードが語る、CQRSを上手に使うため方法
- Fizz Buzz と税率とタイムゾーンの話 (ドメインレイヤとアプリケーションレイヤの話、あるいは時間変化する値をモデリングする話)
- ドメイン駆動設計に関する何か - 日々常々
- CQSとCQRSの違いはメソッドの分離かモデルの分離かという観点
- CQRS実践入門 [ドメイン駆動設計]
- DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
- ドメイン駆動設計+クリーンアーキテクチャ解説【DDD編】
- ドメイン駆動設計のエンティティとクリーンアーキテクチャのエンティティ
- ドメイン駆動設計で実装を始めるのに一番とっつきやすいアーキテクチャは何か[DDD]
- [DDD]ドメイン駆動 + オニオンアーキテクチャ概略
- Repositoryによる抽象化の理想と現実/Ideal and reality of abstraction by Repository
- イミュータブルデータモデル
- CQRSはEvent Sourcingなしで実現できるのか?
- ドメイン知識とユースケースの違いは何か?[ドメイン駆動設計][DDD]
- ドメイン駆動設計と Red Hat - Kenta Kosugi - Medium
- DDDとコードとしての正しさ
- Dart/Flutterでドメイン駆動設計(DDD)してみた - 導入編
- Dart/Flutterでドメイン駆動設計(DDD)してみた - 実装編
- GoとMicroserviceでDDDやってみました
- コンテキスト境界を考える - Nick Tune氏のDDD Europeでの講演より
- ゲームで学ぶ「役に立つ」ドメインモデルの考え方
- What is Domain-Driven Design?
- ドメイン駆動設計をわかりやすく - ドメインのモデル設計を手を動かしながら学ぼう
- ドメインロジックのモデリングと実装
- ドメイン知識とユースケースの違いは何か?[ドメイン駆動設計][DDD]
- Understanding Aggregates in Domain-Driven Design - DZone Microservices
- Domain-driven Design (DDD): File Structure
- 新卒にも伝わるドメイン駆動設計のアーキテクチャ説明(オニオンアーキテクチャ)[DDD] - little hands' lab
- レイヤードアーキテクチャ - kawasima
- ドメインもしくはドメインモデルという概念が登場する書籍一覧
- レイヤードアーキテクチャを振り返る - Sansan Builders Blog
- 今すぐ「レイヤードアーキテクチャ+DDD」を理解しよう。(golang) - Qiita
- レイヤードアーキテクチャの視点 - Qiita
- DDDからみた基盤となるアーキテクチャ * masu-mi's blog(Dirty Cache)
- レイヤー設計とか、オブジェクト指向とか、DDDとか、その辺 - まっつんの日記
- Domain-Driven Design Case study: Introducing Fiverr Logo Maker
- ざっくりCQRS/Event Sourcingを解説する
- 技術系の境界線
- DDDにおいて、外部連携先のコールバック処理は鬼門となるので注意したい話 - まっちゅーのチラ裏
- DDDにおけるアプリケーションサービスとドメインサービスの違い - Qiita
- ドメイン駆動設計(DDD) 初心者がドメインサービスについて分かった気になるまでの道のり - RAKUS Developers Blog | ラクス エンジニアブログ
- 混乱しがちなサービスという概念について - かとじゅんの技術日誌
- ドメイン駆動設計を浸透させるために転職して最初の3ヶ月でやったこと[DDD] - little hands' lab
- [ 技術講座 ] Domain-Driven Designのエッセンス 第2回|オブジェクトの広場
- 実践DDD本 第10章「集約」~トランザクション整合性を保つ境界~
- IDDD本から理解するドメイン駆動設計連載一覧
- Go(Echo), Gorm, Mysql, Docker, Swaggerで、クリーンアーキテクチャなAPIサーバーを作ったメモ
- ドメイン駆動設計の集約のわかりにくさの原因と集約を理解するためのヒント - ソフトウェア設計を考える
Fizz Buzz と税率とタイムゾーンの話 (ドメインレイヤとアプリケーションレイヤの話、あるいは時間変化する値をモデリングする話
- FizzBuzzのロジックをドメイン(Entities層)とアプリケーションレイヤ(UseCase層)のどちらに書くか
- FizzBuzz自体のロジックはドメイン層に書く
- アプリケーション層(UseCase層)にはアプリケーションとしてどう使われるかに応じたロジックを書く
- FizzBuzzの数値から文字列を生成するロジックは問題の最上位レベルのルールなのでエンティティで、入出力回りなどをユースケースに記述する
Clean Architecture
- Clean Architectureなにもわからないけど実例を晒して人類に貢献したい
- ドメイン駆動設計+クリーンアーキテクチャ解説【クリーンアーキテクチャ編】
- 世界一わかりやすいClean Architecture
- 実践クリーンアーキテクチャ with Java
- 実践クリーンアーキテクチャ
- クリーンアーキテクチャ完全に理解した
- Laravel × Clean Architecture 新規開発中の現場
- 先行開発!Javaでクリーンアーキテクチャ / Clean architecture with java
- Implement Clean Architecture for Software Development
- Javaでクリーンアーキテクチャする方法 Part.1:ヘキサゴナルアーキテクチャ
- Clean ArchitectureとEffで変更に強いAPIを設計する / API design by Clean Architecture and Eff
- ソースコードで理解するクリーンアーキテクチャ - Sansan Builders Blog
- 再考 - ドメインサービス - まっちゅーのチラ裏
- Clean Architecture: the solution to have a reusable, flexible and testable code
- 5年間 Laravel を使って辿り着いた,全然頑張らない「なんちゃってクリーンアーキテクチャ」という落としどころ
- Controller, UseCase, Service (および Model) の役割分担についての考察 - Qiita
- Clean Architectureで分からなかったところを整理する - Qiita
- オニオンアーキテクチャとは何か - Qiita
- クリーンアーキテクチャ(The Clean Architecture翻訳)
- Controller, UseCase, Service (および Model) の役割分担についての考察 - Qiita
- Clean Architectureにおいてバリデーションはどこでやるべきか
Design Pattern
- The 7 most important software design patterns
- Behavioral Design Pattern: Strategy - The Startup
- A deep dive into the Strategy Design Pattern
- Parent Chaining Pattern
- The Decorator Pattern - A simple guide
- Design Patterns: Structural Patterns of Design Classes and Objects
- 5 Design Patterns Every Software Developer Should Know
- Practical Introduction to Strategy Design Pattern Using Java