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