-
-
Save sergii/b662565b3001e9bf7261c5cb820d1af0 to your computer and use it in GitHub Desktop.
A Rails directory tree that expresses DDD layers and bounded contexts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
components/ | |
my_bounded_context/ | |
app/ | |
presentation/ # This is called the "UI" layer in DDD literature, but it is also | |
# where things like JSON interfaces live -- any kind of presentation | |
# or handshake to anything outside. So "presentation" rather than "ui". | |
assets/ | |
helpers/ | |
mailers/ | |
views/ | |
operation/ # Would be named "application" if we weren't already in an "app" directory | |
controllers/ | |
listeners/ # Wisper plumbing. These should traffic in Domain Events. | |
services/ # Application services, as distinct from domain services. | |
# http://gorodinski.com/blog/2012/04/14/services-in-domain-driven-design-ddd/ | |
workers/ # Thin Sidekiq shells that delegate to domain services. | |
domain/ | |
my_bounded_context/ | |
my_first_aggregate/ | |
repository.rb | |
my_first_aggregate_root_entity_name.rb | |
another_entity_in_this_aggregate.rb | |
an_event_about_this_stuff.rb | |
value_object_only_in_this_aggregate.rb | |
a_relevant_factory.rb | |
a_relevant_service.rb | |
another_aggregate/ | |
repository.rb | |
another_aggregate_root_entity_name.rb | |
second_entity_in_this_other_aggregate.rb | |
another_event.rb | |
a_domain_topic_that_is_not_an_aggregate/ | |
a_service_here.rb | |
perhaps_an_event.rb | |
and_a_value_object.rb | |
infrastructure/ | |
persistence/ # ActiveRecords | |
# This will frequently get broken out as its own component | |
# that depends on the domain. | |
my_bounded_context/ | |
whatever_record.rb | |
whatever_record_repository.rb # gets registered as the provider for the domain repository | |
# TODO what else in infrastructure? I'm not clear on how anything other than persistence is | |
# distinguished from application ("operations") logic. | |
# Perhaps simply promote persistence a level instead? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment