gpt4 book ai didi

spring-boot - 如何使用 DDD 定义带有翻译的实体

转载 作者:行者123 更新时间:2023-12-05 06:37:33 25 4
gpt4 key购买 nike

我有一个使用领域驱动设计的小型应用程序,现在我想要一个带有翻译的实体。

我在互联网上看到领域驱动设计的最佳实践是将翻译与模型分开,但我不知道该怎么做。

这是我的例子:

@Entity
class Product {
@Id
private String id;
private String name;
private String description;
private BigDecimal price;
private BigDecimal originalPrice;

...
}

@Service
class ProductService {

@Autowired
private ProductRepository productRepository;

public List<Product> getAll() {
return productRepository.findAll();
}

public List<Product> getById(String id) {
return productRepository.findById(id);
}

public List<Product> create(ProductDto productDto) {
Product product = new Product(
productDto.getName(),
productDto.getDescription(),
productDto.getPrice(),
productDto.getOriginalPrice()
);
return productRepository.save(product);
}
}

那么我的问题是:

假设我正在接收产品 DTO 中的翻译,我想知道该怎么做。

感谢并感谢您的帮助。

最佳答案

这不是您的核心领域真正感兴趣的东西,您应该需要对其进行建模。您可能会有一些翻译子域,您对这些东西感兴趣,但该设计将专注于将键/语言对映射到翻译。

您的核心域将使用您所在位置的某种默认语言,这将是核心域中众所周知且必需的条目。例如,您的 Product 可能有一个 ProductID(或 SKU 等)以及一个 Description。该描述将使用默认语言。

您的翻译将更多地作为一种基础设施服务在集成层上,并且会提供翻译后的描述(如果有的话);否则是您域中应该需要的默认值。

更新:

我给出的另一个答案:DDD: DTO usage with different logic

例如(广义上):

public Translation 
{
string Locale { get; set; }
string Value { get; set; }
}

public interface ILocalisationQuery
{
Translation For(string locale, string key);
IEnumerable<Translation> For(string key);
}

public class LocalisationQuery : ILocalisationQuery
{
public Translation For(string locale, string key)
{
// lookup from localisation data store
}

public IEnumerable<Translation> For(string key)
{
// lookup from localisation data store
}
}

您将实现对您有意义且适用于您的用例的策略。假设您想获取 spoon 产品的法文描述,并且您已使用 product-spoon 作为键的约定:localisation.For('fr' , '产品汤匙');.

对于我的 JavaScript 前端,我使用 i18next .

关于spring-boot - 如何使用 DDD 定义带有翻译的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47537509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com