मुझे कुछ दिन पहले भी यही चिंता थी, लेकिन sealed traits
के बारे में दस्तावेज़ीकरण में कुछ भी नहीं मिला MongoDB में ADT मॉडलिंग के लिए।
अंत में, मैंने sealed class
का इस्तेमाल किया जैसा कि आधिकारिक में सुझाया गया है स्कैला ड्राइवर जीथब रेपो
.
यदि आप वास्तव में लक्षणों का उपयोग करना चाहते हैं (अमूर्त विधियों की परिभाषा के कारण) तो आप कुछ ऐसा कर सकते हैं:
package example.model
import example.model.adt._
import org.mongodb.scala.bson.ObjectId
import org.mongodb.scala.bson.codecs.Macros._
import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY
import org.bson.codecs.configuration.CodecRegistries.{fromProviders, fromRegistries}
trait MongoModel {
def _id: ObjectId
}
object MongoModel {
val codecRegistery = fromRegisteries(fromProviders(classOf[A]), DEFAULT_CODEC_REGISTRY)
}
अब आप ए के लिए अपना एडीटी sealed class
. के साथ परिभाषित कर सकते हैं ।
package example.model.adt
import example.model.MongoModel
import org.mongodb.scala.bson.ObjectId
sealed class A
final case class B(_id: ObjectId) extends A with MongoModel
final case class C(_id: ObjectId) extends A with MongoModel
यह उत्तर सीधे प्रश्न को हल नहीं करता है लेकिन एक व्यवहार्य समाधान प्रदान करता है। ध्यान दें कि यह कोड सिर्फ एक उदाहरण है। अधिक पूर्ण कार्यान्वयन के लिए, आप यह github रेपो देख सकते हैं .