अद्यतन: में दृढ़ता परत से डोमेन परत को कैसे सारणित करता हूं अद्यतन मैंने संपादित किया है और इस पाठ को बेहतर ढंग से समझाने के लिए जोड़ा है कि मैं क्या हासिल करने की कोशिश कर रहा हूं: मैं एक नया एप्लिकेशन बनाने की कोशिश कर रहा हूं ग्राउंड अप, लेकिन व्यापार परत को दृढ़ता परत के बारे में नहीं जानना चाहिए, वैसे ही कोई नहीं चाहता कि व्यवसाय परत एक आरईएसटी एपीआई परत के बारे में जान सके। नीचे एक दृढ़ता परत का एक उदाहरण है जिसका मैं उपयोग करना चाहता हूं। मैं इस के साथ एकीकृत करने के लिए अच्छी सलाह की तलाश में हूं। मुझे व्यापार तर्क और दृढ़ता तर्क के बीच जिम्मेदारियों को स्पष्ट रूप से विभाजित करने के लिए डिजाइन/वास्तुकला के साथ मदद की ज़रूरत है। हो सकता है कि डोमेन ऑब्जेक्ट्स पर लगातार चलने वाली वस्तुओं की मार्शलिंग और अनमर्शलिंग की रेखा के साथ एक अवधारणा।मैं स्केल
एक स्लिम (ए.के.ए. स्कैलाक्वायर) test example से, इस तरह आप कई से अधिक डेटाबेस संबंध बनाते हैं। यह 3 टेबल बनाएगा: ए, बी और a_to_b, जहां a_to_b तालिका ए और बी में पंक्तियों के लिंक रखता है।
object A extends Table[(Int, String)]("a") {
def id = column[Int]("id", O.PrimaryKey)
def s = column[String]("s")
def * = id ~ s
def bs = AToB.filter(_.aId === id).flatMap(_.bFK)
}
object B extends Table[(Int, String)]("b") {
def id = column[Int]("id", O.PrimaryKey)
def s = column[String]("s")
def * = id ~ s
def as = AToB.filter(_.bId === id).flatMap(_.aFK)
}
object AToB extends Table[(Int, Int)]("a_to_b") {
def aId = column[Int]("a")
def bId = column[Int]("b")
def * = aId ~ bId
def aFK = foreignKey("a_fk", aId, A)(a => a.id)
def bFK = foreignKey("b_fk", bId, B)(b => b.id)
}
(A.ddl ++ B.ddl ++ AToB.ddl).create
A.insertAll(1 -> "a", 2 -> "b", 3 -> "c")
B.insertAll(1 -> "x", 2 -> "y", 3 -> "z")
AToB.insertAll(1 -> 1, 1 -> 2, 2 -> 2, 2 -> 3)
val q1 = for {
a <- A if a.id >= 2
b <- a.bs
} yield (a.s, b.s)
q1.foreach(x => println(" "+x))
assertEquals(Set(("b","y"), ("b","z")), q1.list.toSet)
मेरी अगले कदम के रूप में, मैं इस ऊपर वस्तुओं के साथ काम करने के लिए, एक स्तर (मैं अभी भी चालाक का उपयोग करें, लेकिन यह अच्छी तरह से लपेट करना चाहते हैं) लेना चाहते हैं। तो छद्म कोड में कुछ ऐसा करना अच्छा होगा:
objectOfTypeA.save()
objectOfTypeB.save()
linkAtoB.save(ojectOfTypeA, objectOfTypeB)
या ऐसा कुछ। मेरे पास जावा पर इस तरह से विचार करने के बारे में मेरे विचार हैं, लेकिन मुझे एहसास हो रहा है कि शुद्ध ओओ भाषाओं से मेरे कुछ ऑब्जेक्ट उन्मुख विचारों में मुझे असफल होना शुरू हो रहा है। क्या कोई मुझे कृपया कुछ पॉइंटर्स दे सकता है कि स्कैला में इस समस्या से कैसे संपर्क करें।
उदाहरण के लिए: क्या मैं साधारण ऑब्जेक्ट्स बनाता हूं जो टेबल ऑब्जेक्ट को लपेट या विस्तारित करते हैं, और फिर इन (रचना) को किसी अन्य वर्ग में शामिल करते हैं जो उन्हें प्रबंधित करता है?
कोई विचार, मार्गदर्शन, उदाहरण (कृपया), जो मुझे इस समस्या से बेहतर तरीके से संपर्क करने में मदद करेगा क्योंकि एक डिजाइनर और कोडर की सराहना की जाएगी।
दस हजार स्केल सवाल! –
@oxbow_lakes, और उस पर एक बहुत अच्छा! – missingfaktor
@oxbow_lakes यह 5 साल पहले था। 100k वें स्कैला प्रश्न की प्रतीक्षा –