강의

멘토링

로드맵

BEST
Programming

/

Back-end

トビのクリーンスプリング - ドメインモデルパターンとヘキサゴナルアーキテクチャ Part 1

仮想のスタートアップ開発チームが段階的にクリーンコードとSpring開発原則に従って、迅速で安定かつ柔軟、そして保守性の高い開発を行う過程を実際の業務遂行と類似した方式で経験できるようにする講座シリーズである「クリーンSpring」の第1回目講座です。ドメインモデルパターンとヘキサゴナルアーキテクチャを活用して、ドメイン中心の初期開発段階で必要な技術と開発戦略を習得できます。

  • tobyilee
실습 중심
백엔드이해하기
클린코드
Java
Spring
Spring Boot
JPA
hexagonal-architecture

学習した受講者のレビュー

こんなことが学べます

  • ドメインモデルを中心とした設計と開発戦略

  • ドメイン駆動設計(DDD)のさまざまなパターンと実践法

  • ヘキサゴナルアーキテクチャの特徴と効果、簡単にこれを適用する方法

  • 多様なテスト技法とアーキテクチャテストツールの使用法

  • AIを活用してJPAエンティティを簡潔なドメインモデルにする方法

  • 最新スプリングウェブ例外処理の技法とテストツールの使用法

  • アグリゲートを用いたモジュール構成

トビーと一チームなる
スプリングサービスを完成させます。

<トビーのクリーンスプリング>は、仮想のオンライン教育サービス「スプラーン(Splearn)」を共に開発し、企画から設計、実装、リファクタリングまで、全体の過程を本番のように体験する講義です。

皆さんはトビーと一チームになり、一つのサービスを一緒に完成していきます。企画から実装、リファクタリングまで、各過程ごとに何を考慮し、どんな決定を下すべきかトビーとともに現実的な観点から悩んで判断していきます。このプロセスを通して、あなたはどの技術が「いつそしてなぜ必要なのか」、「なぜこのような構造を設計したのか」という文脈を理解する力を養います。

<トビーのクリーンスプリング>ロードマップ
クリーンコードとスプリング開発の原則を習得するシリーズ講義です。ドメインモデリングからMSA、観測性まで、Springアプリケーションの成長プロセスを7つのコースに収めました。 (ロードマップに行く>>)

336073_1

持続可能なコードの選択
クリーンスプリング

クリーンスプリングは、「クリーンコード」の原則をスプリング開発に適用する実践戦略です。単に見やすいコードではなく、チームの生産性と長期的なコード品質を一緒に引き上げることが目標です。ケント・ベックが語った「機能的でクリーンなコード」は、その重要な哲学をよく示しています。

保守性と生産性はお互いを前提とします。変更しやすいコードがメンテナンスを容易にし、素早く変えることができなければ生産性も上がります。この構造を作るためにはリファクタリングが必須であり、その前提はテストコードです。

このレッスンでは、機能を追加したり構造を整理したりするたびに、直接リファクタリングしてテストを作成するプロセスを繰り返し表示します。

これらの実践はまもなくクリーンスプリング戦略であり、あなたはこれによって変化に強いコードを生み出す事故の力を育てます。

(クリーンスプリング詳細な話はインフコン2024発表映像でご覧いただけます。👉 )

トビーのクリーンスプリングシリーズ、第一

ドメインモデルと
ヘキサゴナルアーキテクチャ

クリーンスプリング開発の始まりは、サービスが解決しようとしている問題(ドメイン)を深く理解することです。そしてこれをコードに反映し、機能が拡張されても安定的に発展できるように設計する核心戦略がドメインモデルパターンとヘキサゴナルアーキテクチャ(hexagonal-architecture)です。

講義では、最新のSpring、Web、JPA技術をもとにドメインモデルとヘキサゴナルアーキテクチャを実際に適用してみて、プロジェクト構造の把握、モジュール分離、コラボレーション方式、テスト戦略といった実務初期のコア悩みを一緒に解決していきます。このプロセスでは、ドメインモデルをリファクタリングして発展させる流れを体験することができます。

<ドメインモデルとヘキサゴナルアーキテクチャ>は、part1,2の2つの講義で構成されています。

Part1.メンバー機能を中心に、ドメインモデルとアーキテクチャのスケルトンを構築し、コアロジック設計、構造化、テストコードベースの開発方法を実践します。 *本講義

Part2.複雑な要件をカバーし、モデルをリデザインし、実践に必要な深い設計、さまざまなリファクタリング技術、テストサポートツールを適用します。

ドメインモデルとヘキサゴナルアーキテクチャ part1。

学習内容

ドメインモデルを中心とした開発戦略

ドメインの概念と関係を正確に反映するには、それを抽象化したドメインモデルが必要です。ドメイン主導設計(DDD)は、ドメイン専門家と開発チームが一緒にモデルを確立し発展させ、複雑な問題を効果的に解決するアプローチです。

講義では、複雑なドメインではなくても、DDDの重要な原則とパターンを実際のサービス開発に適用します。また、ドメインモデルをコードに自然に溶かし、継続的な統合を通じて発展させる方法も一緒に練習します。

コミュニケーションのためのドメインモデル文書の作成方法

ドメインモデル中心の開発が効果的になるためには、すべての開発チームのメンバーがドメインの専門家と一緒にモデルを作成してコミュニケーションできる必要があります。

そのためには、文書、コード、会議など、あらゆるコミュニケーションで単一の語彙システム、つまりユニバーサル言語(Ubiquitous Language)を一貫して使用することが重要です。

レッスンでは、この普遍的な言語とドメインモデルをマークダウン文書としてプロジェクトに書き込む方法を紹介し、コードの変更とともにモデルがどのように進化していくのかをまとめていきます。

ヘキサゴナルアーキテクチャの事実と誤解

ヘキサゴナルアーキテクチャはよく誤解されますが、Springの基本原則に従う開発者であれば、すでにその価値をある程度活用している可能性があります。

レッスンでは、ヘキサゴナルアーキテクチャの重要な概念、階層、インターフェイスの構成方法を調べ、アーキテクチャが提供する利点を効果的に得る方法を学びます。

簡単な原則だけを守ってもドメインロジックに集中することができます。

階層間依存関係ルールの適用

ヘキサゴナールアーキテクチャとドメインモデルパターンを一緒に適用すると、凝集度が高くメンテナンス性に優れた構造を作ることができます。ただし、これらの構造の価値を適切に活用するには、階層アーキテクチャの依存関係規則をよく守る必要があります。

講義では、各階層の責任に応じて機能をどのように配置するか、コード構成をどのようにすべきかを中心に、階層設計でよく見逃しやすい部分を深く扱います。

アグリガートを用いたモジュール構造設計

ドメイン主導設計で導入されたアグリゲートは、データ変更の単位を設計し、変更の一貫性を維持します。

アグリゲート内で満たさなければならない不変式をどのように見つけて扱うか、アグリゲートルートをどのように使用するのか、それをサポートするSpring Dataプロジェクトのリポジトリパターンはどのように使用するのかを見て、アグリゲートパターンを適用します。

アグリゲットとヘキサゴナールアーキテクチャを組み合わせて詳細モジュールを設定する方法も説明します。

JPAエンティティによるきちんとしたドメインオブジェクトの作成

JPA技術の特徴と目的を見て、JPAエンティティをドメインオブジェクトを効果的にする技術として活用する方法を紹介します。

過度のJPAアノテーションがドメインロジックと混在している問題を解決するための標準的なアプローチもお知らせします。この時、AI技術を活用してみます。

JPAエンティティをドメインと区別して使用する特別なケースについても話します。

アーキテクチャテストとコード検証、テスト戦略

作成したアプリケーションコードが外部に提供する機能が正しく作成されていることを確認するテストコードを作成します。テストでは直接確認が難しいが、運用環境で問題になる可能性がある、静的分析ツールを活用したコード検証方式も併せて適用し、コードの安定性と一貫性を高める方法を習得します。

こんな方に
おすすめです

学習対象は
誰でしょう?

  • WebとDBを使うSpring技術での実務開発がどう進むか知りたい方

  • クリーンコード原則を適用して保守性に優れ生産性の高いシステム開発をご希望の方

  • サービス開発をリードする中級以上の開発者に成長したいジュニア開発者

  • 最新アーキテクチャと開発技法を学び、多大な期待を胸に働き始める新人、ジュニア開発者をリードしたいシニア開発者

前提知識、
必要でしょうか?

  • Java 言語

  • スプリングの基本原理の理解

  • ウェブAPIとJPAを使用するスプリングアプリケーション開発経験

こんにちは
です。

13,872

受講生

799

受講レビュー

349

回答

5.0

講座評価

7

講座

호주에 살고 있는 소프트웨어 개발자입니다. 30년간 다양한 분야의 시스템과 서비스를 개발해본 경험이 있습니다. 

스프링 프레임워크와 관련 기술을 좋아하고 JVM 기반 언어를 주로 사용합니다.

한국스프링사용자모임(KSUG)을 설립하고 활동했고, 토비의 스프링이라는 책을 쓰기도 했습니다.

개발과 관련된 다양한 주제에 관해 이야기하는 것을 좋아합니다. 

 

 

カリキュラム

全体

43件 ∙ (14時間 31分)

講座資料(こうぎしりょう):

授業資料
講座掲載日: 
最終更新日: 

受講レビュー

全体

183件

5.0

183件の受講レビュー

  • zin님의 프로필 이미지
    zin

    受講レビュー 2

    平均評価 5.0

    5

    29% 受講後に作成

    Khi lần đầu làm phát triển cùng Toby님, tôi đã mong các đồng nghiệp phát triển khác cũng được trải nghiệm những khoảng thời gian đó. Vì vậy, tôi đã đưa ra ý tưởng về lộ trình mang tên <토비의 클린 스프링>. Buổi học đầu tiên của lộ trình đó đã bắt đầu, tôi cảm thấy hồi hộp! Với buổi học này, tôi mong mọi người sẽ cùng nhau suy nghĩ về business, áp dụng vào phát triển, học hỏi, thử áp dụng vào thực tế.. và học một cách thú vị theo cách riêng của mình. Tôi cũng sẽ chăm chỉ học và dần dần lấp đầy những phần còn thiếu sót. Ai muốn tham gia cùng không~?🥰

    • tobyilee
      知識共有者

      Khóa học lần này tuy ngắn ngủi nhưng tôi đã chuẩn bị nó trong lúc hồi tưởng lại những kỷ niệm cùng Zin phát triển và học tập. Những ví dụ đơn giản mà chúng tôi đã tạo ra lúc đó, cấu trúc kiến trúc có mục đích, cách xử lý logic miền, việc viết và refactor code test tốt, tất cả đã được tái tạo thành bài giảng. Cảm ơn bạn vì đã giúp đỡ rất nhiều trong suốt quá trình phát triển cùng nhau tại hiện trường, và cả sau đó khi lên kế hoạch, chuẩn bị và công bố bài giảng. Dù bận rộn, xin hãy xem lại bài giảng và nhất định để lại cảm nhận của bạn về lần này. Tôi sẽ chờ đợi. Cảm ơn bạn.

  • choicore님의 프로필 이미지
    choicore

    受講レビュー 2

    平均評価 5.0

    修正済み

    5

    100% 受講後に作成

    Nghe tin khóa học đã ra mắt, tôi quyết tâm sẽ xem vào cuối tuần và vừa hoàn thành nó. Đây là một khoảng thời gian quý giá để có thể trải nghiệm gián tiếp phong cách làm việc và bí quyết của bậc thầy Spring Hàn Quốc. Mặc dù độ khó được phân loại là sơ cấp, nhưng tôi nghĩ rằng phong cách làm việc và tư duy của các nhà phát triển khác không phải là điều dễ dàng tìm thấy ở bất cứ đâu, bất kể độ khó. Khi thiết kế model, quá trình thay đổi code dần dần, bao gồm các vai trò cần có, trạng thái cần thiết cho vai trò, v.v., và đôi khi họ cũng thể hiện sự "con người" (lỗi chính tả, thiếu sót) mà có thể được xác định bằng test code. Tôi cảm thấy rằng những phần có thể xảy ra vô số lần trong cuộc sống hàng ngày thực sự cho thấy giá trị của test code nhiều hơn. Có rất nhiều bí quyết về testing như việc sử dụng Fixture, Mock (Stub), v.v., việc xác định đối tượng, hành vi, mục đích cần kiểm tra, hay sự phân biệt giữa unit, integration, v.v.! junit-platform.properties thật tuyệt vời MockMvcTester thật tuyệt vời Đặc biệt, phần "Sự thật và những hiểu lầm về kiến trúc Hexagonal" rất ấn tượng. Vì tôi chỉ biết lỏm bỏm, nên việc họ chỉ ra rõ ràng cách mà những người sáng lập như Eric Evans và Alistair Cockburn đã diễn giải và những phần cốt lõi họ đã nói dường như đã giúp sắp xếp lại những phần tôi cảm thấy khó khăn. Khóa học này có thể hữu ích cho những người sau: Các nhà phát triển cấp cao cần dẫn dắt thiết kế Những người đã học và có kinh nghiệm với dự án kiến trúc Hexagonal nhưng cảm thấy thiếu hiểu biết sâu sắc Những người muốn tìm hiểu đúng cách về Domain Model Pattern, Transaction Script Pattern, Hexagonal Architecture Những người muốn biết bậc thầy Spring phát triển như thế nào Tôi đã học được về Clean Spring và cách cấu hình đã đạt được nhiều lợi ích nhờ tích hợp với Spring. Xin cảm ơn. Không có Spring thì không phát triển. Spring là POJO!!!

    • tobyilee
      知識共有者

      À, là Jaehyung đây rồi, người luôn để lại những đánh giá khóa học chi tiết. Tôi đã cố gắng lồng ghép giới thiệu không chỉ các mẫu và nguyên tắc mà còn cả các công nghệ Spring mới nhất tại thời điểm hiện tại, và cảm ơn bạn đã nắm bắt được điều đó rất tốt. Tôi mong bạn sẽ tiếp tục phát triển thành một nhà phát triển giỏi. Cảm ơn bạn.

  • arawn님의 프로필 이미지
    arawn

    受講レビュー 1

    平均評価 5.0

    5

    100% 受講後に作成

    Tôi chuyển cảm nhận hoàn thành khóa học đã để lại trên LinkedIn sang Inflearn. https://www.linkedin.com/posts/arawn_%EA%B8%B0%EB%8B%A4%EB%A6%AC%EB%8D%98-%EC%9D%B4%EC%9D%BC%EB%AF%BC%EB%8B%98%EC%9D%98-%EC%8B%9C%EB%A6%AC%EC%A6%88-%EA%B0%95%EC%9D%98-%EB%A1%9C%EB%93%9C%EB%A7%B5-%ED%86%A0%EB%B9%84%EC%9D%98-%ED%81%B4%EB%A6%B0-%EC%8A%A4%ED%94%84%EB%A7%81%EC%9D%98-%EC%B2%AB-%EC%A3%BC%EC%A0%9C%EC%9D%B8-activity-7352614457123987456-pleA?utm_source=share&utm_medium=member_desktop&rcm=ACoAABvezLwBBEWVnGUkIY_xxm2aE3-sGtVHt0g -- Bài giảng của 이일민님lần này cũng không làm tôi thất vọng. Không chỉ có phong cách giải thích sâu sắc và tử tế đặc trưng của anh ấy, mà cách triển khai dòng suy nghĩ một cách bình tĩnh thông qua live coding đặc biệt tuyệt vời. Cách anh ấy chỉ ra từng điểm một về việc đang nghĩ gì, với ý định gì khi viết code thật đáng kinh ngạc. Khi theo dõi bài giảng, tôi có thể cảm nhận được sự đắm chìm như thể trở thành chính giảng viên và trải nghiệm trực tiếp quá trình tư duy, qua đó tự nhiên hiểu được cách áp dụng Domain Model Pattern và Hexagonal Architecture khi phát triển ứng dụng với Java và Spring. Độ sâu kỹ thuật rất xuất sắc, nhưng điều đặc biệt ấn tượng trong bài giảng này là việc thể hiện 'thái độ đối với công nghệ' và 'phương pháp học tập' như một chuyên gia. Thứ nhất, đưa ra cách tiếp cận đúng đắn về việc học công nghệ một cách rõ ràng. Khi giải thích về Hexagonal Architecture, anh ấy triển khai nội dung dựa trên bài viết gốc và quan điểm cốt lõi của Alistair Cockburn - người đầu tiên đề xuất kiến trúc này. Điều này có vẻ quá đương nhiên, nhưng thực tế nhiều người tiếp cận công nghệ thông qua nội dung đã được gia công lần 2, lần 3 thay vì tài liệu gốc. Tài liệu đã gia công có thể hữu ích trong việc hỗ trợ hiểu biết, nhưng cũng tồn tại nguy cơ ý định của tác giả gốc bị pha loãng hoặc bóp méo. Điều này giúp tôi nhắc nhở lại rằng để hiểu bản chất của công nghệ, cần tiếp cận tài liệu nguồn gốc càng nhiều càng tốt. Thứ hai, tôi có thể cảm nhận được tầm quan trọng của tư duy có logic riêng. Ví dụ trong bài "Entity vs DTO", anh ấy đã chứng minh từng cái một cách logic về quan điểm của mình về việc tại sao sử dụng entity ở presentation layer không phải là vấn đề. Khi một developer đưa ra quyết định kỹ thuật nào đó, họ phải có thể giải thích lý do bằng logic của chính mình chứ không phụ thuộc vào thẩm quyền bên ngoài. Đây là điều đương nhiên nhưng thực tế không dễ thực hiện, và 이일민님 đã trực tiếp cho thấy cách thực hiện điều đương nhiên đó. Bài giảng này không chỉ dừng lại ở việc dạy công nghệ đơn thuần, mà còn truyền đạt cả tư duy và thái độ cần có của một developer, thật sự là một trải nghiệm quý giá. Tôi rất khuyến khích cho những ai muốn nghiêm túc trong việc phát triển phần mềm.

    • tobyilee
      知識共有者

      Bạn đã tóm tắt rất tốt những gì tôi muốn truyền tải qua bài giảng. Cảm ơn bạn.

  • maskunflower23707님의 프로필 이미지
    maskunflower23707

    受講レビュー 2

    平均評価 5.0

    5

    79% 受講後に作成

    Tại nơi đầy hỗn loạn và vô trật tự, Toby-nim đã phán 'Hãy có ánh sáng', và ánh sáng đã xuất hiện, thiết lập lại trật tự. Tôi có cảm giác như đang đọc được một lý thuyết chuẩn mực về Domain Model Pattern và Hexagonal Architecture, những điều tôi đã trăn trở rất nhiều. Xin giới thiệu.

    • tobyilee
      知識共有者

      Ối.. Tôi không phải là người có khả năng phi thường như vậy đâu. Chỉ là, tôi nhớ những điều đáng tiếc khi thấy một số người gặp chút bối rối hoặc không khai thác được giá trị của công nghệ, nên tôi đã cố gắng hết sức để giải thích dựa trên những gì mình đã học và xác nhận. Mặc dù vậy, tôi cũng có thể có những chỗ sai sót. Vì nhiều người đang đóng góp ý kiến, tôi sẽ học hỏi và chuẩn bị thêm để tiếp tục chia sẻ trong các bài giảng tiếp theo.

  • zecongbi님의 프로필 이미지
    zecongbi

    受講レビュー 5

    平均評価 5.0

    5

    30% 受講後に作成

    Mặc dù mới chỉ nghe được một nửa bài giảng, nhưng đây là cơ hội để tôi xem xét lại những điều mình đã hiểu sai khi làm việc thực tế. Trong tương lai, tôi sẽ tiếp tục theo dõi bài giảng để tiếp thu thêm nhiều kiến thức. Xin cảm ơn vì bài giảng hay.

    • tobyilee
      知識共有者

      Mong rằng nội dung đã giúp ích nhiều. Cảm ơn bạn đã để lại đánh giá tốt.

期間限定セール、あと2日日で終了

¥1,909,966

24%

¥14,611

tobyileeの他の講座

知識共有者の他の講座を見てみましょう!

似ている講座

同じ分野の他の講座を見てみましょう!