سؤال

أنا أقوم بإنشاء موقع ويب سيحتاج إلى نوعين من المستخدمين: الطلاب والموفرون. في إعداد Java التقليدي، سأقوم بإنشاء فئة مستخدم (أو واجهة) ثم قم بإنشاء فئتين مورودا من المستخدم. هل هذه هي أفضل دورة في Scala أيضا، باستخدام "يمتد" و "مع" المعدلات "؟ إذا كانت هذه هي في الواقع أفضل طريقة (التي أظن أنها كذلك)، فما أفضل طريقة لتعيين هذا في DB؟ هل سيكون من الأفضل الاحتفاظ بعمود "نوع" ثم تعيينه إلى واحد أو آخر؟

السؤال الثاني هو كيفية العمل مع الرأي. ستكون الشاشة مختلفة للغاية اعتمادا على نوع المستخدم واحد هو ولذا فإنني سأكون هناك بعض المنطق التوجيه الجاد المعني أو على الأقل منطق مضمن في مقتطفات في العرض.

أعتقد أن السؤال الشامل هو: هل هناك طريقة "مفضلة" للذهاب إلى القيام بذلك (مثل وصفة في القضبان أو بعضها من هذا القبيل)، أو أنا من خارجهي؟

شكرا

هل كانت مفيدة؟

المحلول

إذا كانت هذه هي في الواقع أفضل طريقة (التي أظن أنها كذلك)، فما أفضل طريقة لتعيين هذا في DB؟ هل سيكون من الأفضل الاحتفاظ بعمود "نوع" ثم تعيينه إلى واحد أو آخر؟

لا أعتقد أن هناك "أفضل طريقة" واضحة لتصميم بنية قاعدة البيانات بالنظر إلى سيناريو. إجابة كتاب النص هو تطبيع قاعدة البيانات و جاف.

نهج ثلاث طاولات

يمكن أن يكون إحدى الطرق على سبيل المثال لإنشاء جدول المستخدم الذي يحتوي على كلا النوعين من المستخدمين، تخزين السمات الشائعة فقط، وإنشاء جدول الطالب وجدول موفر مع مفتاح أجنبي لجدول المستخدم والسمات المتخصصة إن وجدت. هذا ربما ليس ما يوصي شخص قاعدة بيانات العلائقية التقليدية، لكنه يقترب من نموذج ميراث OO.

نهج جدول واحد

سيكون نهج آخر مثلك هو مجرد إنشاء حقل "Usertype" وتخزين كلا النوعين من المستخدمين في جدول المستخدم. إنه بسيط، لكنك تفوت فرصة الاستفادة من السلامة المرجعية لقاعدة البيانات العلائقية. على سبيل المثال، إذا كنت تقوم بإنشاء جدول أطفال محدد فقط للطالب فقط، مثل الواجبات المنزلية، فلا يمكنك ببساطة إجراء مفتاح أجنبي للطالبات إذا عاش كل من الطلاب والمقدمين في جدول المستخدمين.

نهج طاولتين

إذا كنت تستخدم إطار عمل التعيين العلائقي للكائنات، فمن المحتمل أن تكون أسهل طريقة للذهاب هي الخريطة بالضبط ما تريده في مضيق الكائنات العالمية في قاعدة البيانات، والذي سيكون له طاولة طاولة وطاولة ومزود، وتعبر عن المشتركة بين سمة في الجانب scala.

لقد وجدت رفع ورقة الغش:

تحديد النماذج

يتم تعريف الطرازات رفع أو معينة بناء على فئة مع الحقول.

class WikiEntry extends KeyedMapper[Long, WikiEntry] {
  def getSingleton = WikiEntry // what's the "meta" object
  def primaryKeyField = id

  // the primary key
  object id extends MappedLongIndex(this)

  // the name of the entry
  object name extends MappedString(this, 32) {
    override def dbIndexed_? = true // indexed in the DB
  }

  object owner extends MappedLongForeignKey(this, User)

  // the text of the entry
  object entry extends MappedTextarea(this, 8192) {
    override def textareaRows  = 10
    override def textareaCols = 50
  }
}

مناقشة حول وجود الصفات الأساسية المشتركة للنماذج.

في موضوع David Pollak يكتب:

كنت تبحث عن بعض سحر scala:

trait Posting[MyType <: Mapper[MyType]] { // Defines some common fields for posted user content 
  self: MyType => 
  def primaryKeyField = id 
  object id extends MappedLongIndex(this) 
  object creator extends MappedLongForeignKey(this, User) 
  object createdAt extends MappedLong(this) { 
    override def defaultValue = System.currentTimeMillis 
  } 
} 

class FooPosting extends KeyedMapper[FooPosting] with Posting[MyType]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top