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
-
2023-12-19
Beta Was this translation helpful? Give feedback.
All reactions