Spring Boot ValueObjects和Primitives之间的边界- DDD和Clean Architecture

wn9m85ua  于 2023-06-22  发布在  Spring
关注(0)|答案(1)|浏览(132)

我很困惑ValueObjects和Primitive类型之间的边界在哪里。应用程序服务应该采用ValueObjects还是基元类型作为参数?应用程序服务的基础架构适配器之间的通信也是如此:例如:
应用服务/CQRS层(Kotlin中的示例- Sping Boot 应用程序)

data class RegisterNewUserCommand(
    val username: String,
    val rawPassword: String,
    val email: String)

data class RegisterNewUserCommand(
    val username: Username,
    val rawPassword: RawPassword,
    val email: Email)

和应用程序端口与基础架构层通信:

interface CouponsRepository {
    fun findByCode(couponCode: CouponCode): Coupon?
}

interface CouponsRepository {
    fun findByCode(couponCode: String): Coupon?
}

我试图找到一些代码的例子,但没有明确的答案,我的问题。最后一个问题是应用(和域)层是否应该仅对ValueObjects和Entities进行操作?

lkaoscv7

lkaoscv71#

我很困惑ValueObjects和Primitive类型之间的边界在哪里。
对于进入系统的信息,其中信息被表示为通用数据结构,通常的指导是尽可能早地将该信息解析成适合目的的数据结构。
但尽早是权衡取舍;一方面,我们越早 Package 数据, Package 数据的好处就越长,但另一方面,我们引入了耦合。
换句话说,我们要考虑耦合到特定领域模型的部件的潜在可重用性。
对于离开系统的信息,这主要是关于将信息从领域模型的表示复制到通用的表示,并且通常我们不需要担心数据约束或解析,因此适合目的的表示的优势被降低了。
在“查询”的情况下,我们可能永远看不到它的域表示中的信息--在很多情况下,我们可能会采用持久性存储提供的表示并将其复制到HTTP响应中,而不引入“ValueObject”。
推荐阅读:

相关问题