2023-12-19 #8
cheese10yun
announced in
Announcements
Replies: 1 comment
-
DDD 및 Rich Object에 대한 회의감class Member(
@Field(name = "member_id")
val memberId: String,
@Field(name = "name")
var name: String,
@Field(name = "email")
val email: String
) : Auditable()
fun xxxx() {
val member = memberRepositroy.findById("ID..")
member.updateName("new Name")
}
나름의 대안class Member(
@Field(name = "member_id")
val memberId: String,
@Field(name = "name")
val name: String,
@Field(name = "email")
val email: String
) : Auditable()
data class MemberUpdateForm(
val id: ObjectId,
val name: String,
val email: String
)
interface MemberRepository : MongoRepository<Member, ObjectId>, MemberCustomRepository,
QuerydslPredicateExecutor<Member>
interface MemberCustomRepository {
fun findByName(name: String): List<Member>
fun updateProfile()
}
class MemberCustomRepositoryImpl(mongoTemplate: MongoTemplate) : MemberCustomRepository,
MongoCustomRepositorySupport<Member>(
Member::class.java,
mongoTemplate
) {
fun updateProfile(form: MemberUpdateForm): UpdateResult {
return mongoTemplate.updateFirst(
Query(Criteria.where("_id").`is`(form.id)),
Update()
.set("name", form.name)
.set("email", form.email),
Member::class.java
)
}
}
@Service
class MemberQueryService(
private val memberRepository: MemberRepository
) {
fun updateProfile(form: MemberUpdateForm) {
// 유호성 검사 등등 기타 로직
memberRepository.updateProfile(form)
}
}
여러 협력이 필요한 경우@Service
class MemberQueryService(
private val memberRepository: MemberRepository,
private val couponRepository: CouponRepository,
private val couponQueryService: CouponQueryService,
) {
fun getXXX(form: MemberUpdateForm) {
// 쿠폰 & 유저 관련 조회 코드
// couponRepository 를 이용해서 접근하지 말것
// couponQueryService을 통해서만 접근할것
}
}
@Service
class AggregationCoupon(
private val memberQueryService: MemberQueryService,
private val couponQueryService: CouponQueryService,
) {
fun getXXX(form: MemberUpdateForm) {
// 쿠폰 & 유저 관련 조회 코드
// memberQueryService
// couponQueryService
}
}
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
2023-12-19
Beta Was this translation helpful? Give feedback.
All reactions