Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Question] DDD的最佳实践方式?包括CQRS、Clean Architecture、六边形结构 #3314

Open
WangX0111 opened this issue May 2, 2024 · 5 comments
Labels
question Further information is requested

Comments

@WangX0111
Copy link

Please see the FAQ in our main README.md before submitting your issue.
在go-kratos中DDD的最佳实践方式是什么 ?
包括CQRS、Clean Architecture、六边形结构该如何引入

CQRS的分离应该在哪一层?或者更进一步,DDD的app层在go-kratos中如何体现

@WangX0111 WangX0111 added the question Further information is requested label May 2, 2024
Copy link

dosubot bot commented May 2, 2024

你好,@WangX0111!👋 我是Dosu,一个旨在帮助解决问题、回答问题以及成为贡献者的机器人。我在这里帮助您,同时您等待人类维护者的回复。我将会立即查看您的问题,并尽快给您一个完整的答复。

@kratos-ci-bot
Copy link
Collaborator

Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿


Hello, @WangX0111! 👋 I'm Dosu, a bot designed to help solve problems, answer questions, and become a contributor. I'm here to help you while you wait to hear back from the human maintainers. I will review your question immediately and give you a complete answer as soon as possible.

Copy link

dosubot bot commented May 2, 2024

For implementing Domain-Driven Design (DDD), CQRS, Clean Architecture, and hexagonal architecture within the Kratos framework, it's important to leverage the framework's support for modular design and separation of concerns. Here's a concise guide based on Kratos' capabilities:

  1. Modular Design: Kratos encourages the development, testing, and maintenance of independent components, aligning with DDD principles.
  2. Lifecycle Management: Utilize Kratos' lifecycle management for clear separation between initialization, running, and termination phases.
  3. Service Discovery: Leverage service registration and deregistration for dynamic service discovery, crucial for microservices and DDD architectures.
  4. Context and Metadata: Use context.Context for request-scoped values and AppInfo for accessing application metadata, supporting clean architecture principles.
  5. Concurrency Management: Employ errgroup.Group and synchronization mechanisms for managing parallel operations, facilitating CQRS implementations.
  6. Graceful Shutdown: Handle OS signals for a graceful shutdown, ensuring clean termination and resource cleanup.
  7. Dependency Injection: Although not explicitly detailed, dependency injection is recommended for managing component dependencies, aligning with clean architecture and hexagonal architecture principles.

For specific implementations of CQRS and how the DDD application layer is represented in Kratos, consider these guidelines as a foundation. Kratos' design supports the separation of concerns, a core aspect of CQRS, by allowing for independent development and management of application components. The application's structure, as seen in the app.go file, demonstrates Kratos' capabilities in supporting complex architectural patterns.

If you need further details on implementing these architectural patterns specifically with Kratos, including where the separation for CQRS should occur, it might be beneficial to explore more of Kratos' documentation or seek examples within the community. This approach will provide insights into how Kratos can be effectively used to implement DDD, CQRS, Clean Architecture, and hexagonal architecture.

Details

Sources


About Dosu
This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

@moocss
Copy link

moocss commented May 20, 2024

您可以看一下 https://go-kratos.dev/docs/intro/layout 项目结构, 就可以窥探一二; 我自己认为 DDD 没有最佳实战, 结合自己的项目经验和DDD理论, 完全可以找到一种适合自己的DDD最佳实战.

@kratos-ci-bot
Copy link
Collaborator

Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿


You can take a look at the project structure at https://go-kratos.dev/docs/intro/layout to get a glimpse; I personally think that DDD does not have the best practice. Combining my own project experience and DDD theory, I can definitely find one. The best practice of DDD that suits you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

3 participants