2012-05-10 3 views
5

मैं मॉडल 2.0 के साथ डेटाबेस में वस्तुओं को बनाए रखने के तरीकों और तरीकों के बारे में सर्वोत्तम प्रथाओं की तलाश में हूं। मैंने स्काला का उपयोग करके प्ले 2.0 के लिए प्ले और टाइपएफ़ नमूने का अध्ययन किया है।प्ले 2.0 मॉडल सर्वोत्तम प्रथाओं

क्या मुझे समझ में है:

  • मॉडल/एक मामले वर्ग
  • सभी सम्मिलित/अपडेट करने में परिभाषित किया गया है का चयन हटाना/इस मामले वर्ग के साथी वस्तु में परिभाषित कर रहे हैं

एक नए मालिक को परिभाषित करने के अगर मैं अपने कार वस्तु अद्यतन करने की जरूरत तो मुझे क्या करना होगा:

val updatedCar = myCar.copy(owner=newOwner) 
Car.update(updatedCar) 
// or 
Car.updateOwner(myCar.id.get, newOwner) 

मैं सोच रहा हूँ क्यों अद्यतन करने या हटाने के बयान मामले वर्ग अपने आप में नहीं हैं:

case class Car(id: Pk[Long] = NotAssigned, owner: String) { 
    def updateOwner(newOwner: String) { 
     DB.withConnection { implicit connection => 
      SQL(
       """ 
       update car 
       set owner = {newOwner} 
       where id = {id} 
       """ 
      ).on(
       'id -> id, 
       'newOwner -> newOwner 
      ).executeUpdate() 
     } 
     copy(owner = newOwner) 
    } 
} 

ऐसा करने से क्या करने की अनुमति होगी:

val updatedCar = myCar.updateOwner(newOwner) 

कौन सा है कि मैं क्या प्ले 1 के साथ करते थे। जावा और जेपीए का उपयोग एक्स। शायद कारण स्पष्ट है और स्कैला के मेरे छोटे ज्ञान के कारण।

उत्तर

4

मुझे लगता है कि कारण का हिस्सा स्कैला जैसी कार्यात्मक भाषाओं में अपरिवर्तनीयता का पक्ष है।

आपके उदाहरण में, आप 'this.owner' को संशोधित करते हैं। आपका समतुल्य ऑपरेशन डिलीट की तरह दिखता है, और "यह" क्या होता है?

एक साथी ऑब्जेक्ट के साथ, यह थोड़ा और स्पष्ट लगता है कि पास ऑब्जेक्ट (या आईडी) संशोधित नहीं है, और लौटा ऑब्जेक्ट या आईडी ऑपरेशन का प्रासंगिक परिणाम है।

फिर भी, मुझे लगता है कि इस मुद्दे का एक और हिस्सा यह है कि आपके उदाहरण को पहले एक उदाहरण की आवश्यकता है। जब आप कोई ऑब्जेक्ट हटाते हैं, तो क्या होगा यदि आप आईडी द्वारा हटाना चाहते हैं तो आप एक फॉर्म बंद कर चुके हैं, और पहले उस ऑब्जेक्ट का पूरा उदाहरण बनाना नहीं चाहते हैं जिसे आप हटाना चाहते हैं?

मैं मोंगो साथ play2.0 के साथ खेल किया गया है, और मेरे साथी वस्तुओं देखो की तरह: वस्तु MyObject

फैली SalatDAO [MyObject, ObjectId] (संग्रह = getCollection ("objectcollection")) {}

ये साथी ऑब्जेक्ट्स सीआरयूडी का उत्तराधिकारी है जैसे सलातदाओ (MyObject.save(), MyObject.find(), आदि) से ऑपरेशन। मैं पूरी तरह से स्पष्ट नहीं हूं कि इसे आंतरिक रूप से कैसे कार्यान्वित किया जाता है, लेकिन यह अच्छी तरह से काम करता है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^