Help us understand the problem. What is going on with this article?

ドメイン駆動設計: IDDDに登場するサンプルコードのModule構成をまとめてみた

More than 5 years have passed since last update.

UPDATE 2013.04.16

まとめてから気がついたが、GitHubのVaughnVernon/IDDD_SamplesにIDDDのサンプルコードがあった。

ドメイン駆動設計で実際にどういうふうにディレクトリを切って、Moduleを構成するのか知りたかったので、Implementing Domain-Driven Design に記載さいれているサンプルコードからModule構成をかき集めて再構成してみた。

Moduleの構成

com
└── saasovation
    ├── agilepm
    │   ├── application
    │   │   ├── ProcessService
    │   │   ├── ProductService
    │   │   └── TeamService
    │   ├── domain
    │   │   └── model
    │   │       ├── DomainEvent
    │   │       ├── DomainEventPublisher
    │   │       ├── DomainRegistry
    │   │       ├── DomainTest
    │   │       ├── product
    │   │       │   ├── BacklogItem
    │   │       │   │   └── BacklogItem
    │   │       │   ├── BacklogItemComitted
    │   │       │   ├── BacklogItemRepository
    │   │       │   ├── BusinessPriority
    │   │       │   ├── BusinessPriorityCalculator
    │   │       │   ├── BusinessPriorityRatings
    │   │       │   ├── BusinessPriorityTest
    │   │       │   ├── Product
    │   │       │   ├── ProductDiscussion
    │   │       │   ├── ProductDiscussionRequestTimeOut
    │   │       │   ├── ProductDiscussionRequested
    │   │       │   ├── ProductRepository
    │   │       │   ├── SprintId
    │   │       │   ├── Tenant
    │   │       │   ├── impl
    │   │       │   │   └── InMemoryProductRepository
    │   │       │   ├── release
    │   │       │   │   └── Release
    │   │       │   └── sprint
    │   │       │       └── Sprint
    │   │       ├── team
    │   │       │   ├── Member
    │   │       │   ├── MemberChangeTracker
    │   │       │   ├── MemberService
    │   │       │   ├── ProductOwner
    │   │       │   ├── Team
    │   │       │   └── TeamMember
    │   │       └── tenant
    │   │           └── TenantId
    │   ├── infrastrcuture
    │   │   └── messaging
    │   │       └── ProductDiscussionRequestedListener
    │   └── infrastructure
    │       ├── HibernateBacklogItemRepository
    │       ├── messaging
    │       │   ├── DiscussionStartedListener
    │       │   ├── ProductDiscussionRetryListener
    │       │   └── TeamMemberEnablerListener
    │       └── persistence
    │           └── CoherenceProductRepository
    ├── collaboration
    │   ├── application
    │   │   ├── AccessService
    │   │   └── ForumService
    │   ├── domain
    │   │   └── model
    │   │       ├── calendar
    │   │       │   ├── Calendar
    │   │       │   └── CalendarEntityRepository
    │   │       ├── collaborator
    │   │       │   ├── Author
    │   │       │   ├── Collaborator
    │   │       │   └── CollaboratorService
    │   │       ├── forum
    │   │       │   └── Forum
    │   │       └── tenant
    │   │           └── Tenant
    │   └── infrastructure
    │       ├── messaging
    │       │   └── ExclusiveDiscussionCreationListener
    │       ├── persistence
    │       │   ├── HibernateCalendarEntityRepository
    │       │   └── SpringHibernateSessionProvider
    │       ├── services
    │       │   ├── CollaboratorTranslator
    │       │   ├── TranslatingCollaboratorService
    │       │   └── UserInRoleAdapter
    │       └── servicies
    │           └── UserRoleToCollaboratorService
    ├── common
    │   ├── domain
    │   │   └── model
    │   │       └── process
    │   │           ├── Process
    │   │           ├── ProcessId
    │   │           └── ProcessTimeOut
    │   ├── media
    │   │   ├── OvationMediaType
    │   │   └── ReprensentationReader
    │   └── port
    │       └── adapter
    │           └── messaging
    │               └── rabbitmq
    │                   └── ExchangeListener
    └── identityaccess
        ├── application
        │   ├── AccessService
        │   ├── NotificationService
        │   ├── TenantIdentityService
        │   ├── eventStore
        │   │   ├── EventStore
        │   │   └── StoredEvent
        │   └── notifications
        │       └── PublishedMessageTracker
        ├── domain
        │   └── model
        │       ├── DomainRegistry
        │       ├── access
        │       │   └── Role
        │       └── identity
        │           ├── AuthenticationService
        │           ├── Group
        │           ├── GroupMember
        │           ├── GroupMemberType
        │           ├── Tenant
        │           ├── TenantId
        │           ├── User
        │           └── UserDescriptor
        └── infrastructure
            ├── persistence
            │   ├── GroupMemberTypeUserType
            │   ├── HibernateUserRepository
            │   └── SpringHibernateSessionProvider
            └── servicies
                └── DefaultEncryptionAuthenticationService

収集したクラス・インターフェイスの一覧

com.saasovation.agilepm.domain.model.DomainTest
com.saasovation.agilepm.domain.model.DomainRegistry
com.saasovation.agilepm.domain.model.DomainEvent
com.saasovation.agilepm.domain.model.DomainEventPublisher
com.saasovation.agilepm.domain.model.product.BacklogItemRepository
com.saasovation.agilepm.domain.model.product.BacklogItem
com.saasovation.agilepm.domain.model.product.Tenant
com.saasovation.agilepm.domain.model.product.SprintId
com.saasovation.agilepm.domain.model.product.BusinessPriority
com.saasovation.agilepm.domain.model.product.BusinessPriorityRatings
com.saasovation.agilepm.domain.model.product.BusinessPriorityTest
com.saasovation.agilepm.domain.model.product.BusinessPriorityCalculator
com.saasovation.agilepm.domain.model.product.BacklogItemComitted
com.saasovation.agilepm.domain.model.product.Product
com.saasovation.agilepm.domain.model.product.backlogitem.BacklogItem
com.saasovation.agilepm.domain.model.product.release.Release
com.saasovation.agilepm.domain.model.product.sprint.Sprint
com.saasovation.agilepm.domain.model.product.impl.InMemoryProductRepository
com.saasovation.agilepm.domain.model.product.ProductRepository
com.saasovation.agilepm.domain.model.product.ProductDiscussion
com.saasovation.agilepm.domain.model.product.ProductDiscussionRequested
com.saasovation.agilepm.domain.model.product.ProductDiscussionRequestTimeOut
com.saasovation.agilepm.domain.model.tenant.TenantId
com.saasovation.agilepm.domain.model.team.MemberService
com.saasovation.agilepm.domain.model.team.ProductOwner
com.saasovation.agilepm.domain.model.team.Team
com.saasovation.agilepm.domain.model.team.TeamMember
com.saasovation.agilepm.domain.model.team.Member
com.saasovation.agilepm.domain.model.team.MemberChangeTracker
com.saasovation.agilepm.infrastructure.persistence.CoherenceProductRepository
com.saasovation.agilepm.infrastructure.messaging.TeamMemberEnablerListener
com.saasovation.agilepm.infrastrcuture.messaging.ProductDiscussionRequestedListener
com.saasovation.agilepm.infrastructure.messaging.DiscussionStartedListener
com.saasovation.agilepm.infrastructure.messaging.ProductDiscussionRetryListener
com.saasovation.agilepm.infrastructure.HibernateBacklogItemRepository
com.saasovation.agilepm.application.TeamService
com.saasovation.agilepm.application.ProductService
com.saasovation.agilepm.application.ProcessService
com.saasovation.identityaccess.domain.model.DomainRegistry
com.saasovation.identityaccess.domain.model.identity.User 
com.saasovation.identityaccess.domain.model.identity.GroupMemberType 
com.saasovation.identityaccess.domain.model.identity.Group
com.saasovation.identityaccess.domain.model.identity.GroupMember
com.saasovation.identityaccess.domain.model.identity.TenantId
com.saasovation.identityaccess.domain.model.identity.AuthenticationService
com.saasovation.identityaccess.domain.model.identity.Tenant
com.saasovation.identityaccess.domain.model.identity.UserDescriptor
com.saasovation.identityaccess.domain.model.access.Role
com.saasovation.identityaccess.application.eventStore.EventStore
com.saasovation.identityaccess.application.eventStore.StoredEvent
com.saasovation.identityaccess.application.NotificationService
com.saasovation.identityaccess.application.AccessService
com.saasovation.identityaccess.application.TenantIdentityService
com.saasovation.identityaccess.application.notifications.PublishedMessageTracker
com.saasovation.identityaccess.infrastructure.persistence.HibernateUserRepository
com.saasovation.identityaccess.infrastructure.servicies.DefaultEncryptionAuthenticationService
com.saasovation.identityaccess.infrastructure.persistence.GroupMemberTypeUserType
com.saasovation.identityaccess.infrastructure.persistence.SpringHibernateSessionProvider
com.saasovation.collaboration.domain.model.tenant.Tenant
com.saasovation.collaboration.domain.model.forum.Forum
com.saasovation.collaboration.domain.model.calendar.Calendar
com.saasovation.collaboration.domain.model.calendar.CalendarEntityRepository
com.saasovation.collaboration.domain.model.collaborator.CollaboratorService
com.saasovation.collaboration.domain.model.collaborator.Author
com.saasovation.collaboration.domain.model.collaborator.Collaborator
com.saasovation.collaboration.infrastructure.persistence.HibernateCalendarEntityRepository
com.saasovation.collaboration.infrastructure.persistence.SpringHibernateSessionProvider
com.saasovation.collaboration.infrastructure.servicies.UserRoleToCollaboratorService
com.saasovation.collaboration.infrastructure.services.TranslatingCollaboratorService
com.saasovation.collaboration.infrastructure.services.UserInRoleAdapter
com.saasovation.collaboration.infrastructure.services.CollaboratorTranslator
com.saasovation.collaboration.infrastructure.messaging.ExclusiveDiscussionCreationListener
com.saasovation.collaboration.application.ForumService
com.saasovation.collaboration.application.AccessService
com.saasovation.common.media.OvationMediaType
com.saasovation.common.media.ReprensentationReader
com.saasovation.common.port.adapter.messaging.rabbitmq.ExchangeListener
com.saasovation.common.domain.model.process.ProcessId
com.saasovation.common.domain.model.process.ProcessTimeOut
com.saasovation.common.domain.model.process.Process
suin
Qiita 4位/TypeScript入門書執筆中/TypeScripterのための座談会「YYTypeScript」主催/『実践ドメイン駆動設計』書籍邦訳レビュア/分報Slack考案/YYPHP主催/CodeIQマガジン執筆/株式会社クラフトマンソフトウェア創設/Web自動テスト「ShouldBee」の開発/TypeScript/DDD/OOP
https://yyts.connpass.com/
shouldbee
開発者向けテスト支援サービスShouldBeeを開発・運営するスタートアップ(onlab第8期)
http://shouldbee.at
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした