मैं केक पैटर्न के बारे में जानने की कोशिश कर रहा हूं।केक पैटर्न - यह इतना जटिल क्यों है
मैं इसके बारे में this ब्लॉग पढ़ रहा हूं।
कि ब्लॉग से उदाहरण कोड है:
case class User (name:String,email:String,supervisorId:Int,firstName:String,lastName:String)
trait UserRepository {
def get(id: Int): User
def find(username: String): User
}
trait UserRepositoryComponent {
def userRepository: UserRepository
trait UserRepository {
def get(id: Int): User
def find(username: String): User
}
}
trait Users {
this: UserRepositoryComponent =>
def getUser(id: Int): User = {
userRepository.get(id)
}
def findUser(username: String): User = {
userRepository.find(username)
}
}
trait UserInfo extends Users {
this: UserRepositoryComponent =>
def userEmail(id: Int): String = {
getUser(id).email
}
def userInfo(username: String): Map[String, String] = {
val user = findUser(username)
val boss = getUser(user.supervisorId)
Map(
"fullName" -> s"${user.firstName} ${user.lastName}",
"email" -> s"${user.email}",
"boss" -> s"${boss.firstName} ${boss.lastName}"
)
}
}
trait UserRepositoryComponentImpl extends UserRepositoryComponent {
def userRepository = new UserRepositoryImpl
class UserRepositoryImpl extends UserRepository {
def get(id: Int) = {
???
}
def find(username: String) = {
???
}
}
}
object UserInfoImpl extends
UserInfo with
UserRepositoryComponentImpl
मैं Users
निकाल कर उस कोड को आसान बनाने में कर सकते हैं:
package simple {
case class User(name: String, email: String, supervisorId: Int, firstName: String, lastName: String)
trait UserRepository {
def get(id: Int): User
def find(username: String): User
}
trait UserRepositoryComponent {
def userRepository: UserRepository
trait UserRepository {
def get(id: Int): User
def find(username: String): User
}
}
trait UserInfo {
this: UserRepositoryComponent =>
def userEmail(id: Int): String = {
userRepository.get(id).email
}
def userInfo(username: String): Map[String, String] = {
val user = userRepository.find(username)
val boss = userRepository.get(user.supervisorId)
Map(
"fullName" -> s"${user.firstName} ${user.lastName}",
"email" -> s"${user.email}",
"boss" -> s"${boss.firstName} ${boss.lastName}"
)
}
}
trait UserRepositoryComponentImpl extends UserRepositoryComponent {
def userRepository = new UserRepositoryImpl
class UserRepositoryImpl extends UserRepository {
def get(id: Int) = {
???
}
def find(username: String) = {
???
}
}
}
object UserInfoImpl extends
UserInfo with
UserRepositoryComponentImpl
}
और यह सिर्फ ठीक संकलित करता है।
1) ब्लॉग में कोड इतना जटिल क्यों है?
2) क्या यह केक पैटर्न का उपयोग करने का बेवकूफ तरीका है?
3) इस उदाहरण में Users
कक्षा क्यों आवश्यक है?
4) कि जिस तरह से केक पैटर्न (की तरह लग रहे करने की अपेक्षा की है कि प्रतीत होता है अनावश्यक Users
वर्ग के साथ है?
5) या सरलीकृत संस्करण ठीक है?
ब्लॉग में एक टिप्पणी अनुभाग है। लेखक से पूछना शुरू क्यों नहीं करते? – pedrorijo91
:) :) :) :) :) :) - आप मजाकिया हैं – jhegedus
क्षमा करें, ध्यान नहीं दिया, सिर्फ 3 साल पहले टिप्पणी देखी .. ** मैंने कोड ** में बहुत कुछ खोला नहीं है, लेकिन मुझे लगता है कि यह सिर्फ एक और संकेत स्तर है।यदि आप उस व्यवहार को मॉक/स्टब करना चाहते हैं तो परीक्षण में मदद कर सकते हैं – pedrorijo91