سؤال

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

ورمز بلادي تبدو عموما مثل هذا:

// Execute the data reader
using (DbDataReader reader = command.ExecuteReader())
{
  while (reader.Read())
  {
     obj = this.FillDataReader(reader);
     objlist.Add(obj);
  }
}

internal SomeObject FillDataReader(IDataReader dr)
{
   SomeObject obj = new SomeObject ();


   if (!dr.IsDBNull(dr.GetOrdinal("objectID")))
   {
     obj.ID = dr.GetInt32(dr.GetOrdinal("objectID"));
   }

   return obj;
}

وبعض الطرق التعبئة تصل بسهولة 400+ خطوط، لذلك ليس هناك طريقة لائقة لفصل هذه من؟ ستكون فئات جزئية مقبولة؟ في عالم مثالي، سأكون باستخدام ORM، ولكن للأسف لا أستطيع تحمل من الوقت لتعلم كيفية استخدام واحد.

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

المحلول

وبالتأكيد يمكنك استخدام فئات جزئية لتقسيم بعيدا رمز لأساليب التعبئة. حتى يمكن النظر في استخدام نظام قالب لتوليد هذه الملفات فئة جزئية.

وقال ذلك، وORM هو الحل الأبسط ولا حقا أن تأخذ هذا الوقت الطويل للعمل خارج إذا احتياجاتك بسيطة.

لالاحتياجات الأساسية حيث لا تحتاج LINQ السيطرة على ما يرام إلى SQL يعمل على علاج، وعلى عكس ما يعتقد الكثيرون انها الحصول على تحديث كجزء من VS 2010/4. NET.

ووالكيان الإطار، كما يتم تحديثه خيار آخر كجزء من VS 2010 / صافي 4. فهو يوفر لك الكثير من السيطرة، ولكن أيضا يمكن أن تتطلب أكثر قليلا التعلم.

وكم من الوقت يأخذك إلى إنشاء هذه خط 400+ طويلة ملء الأساليب؟ هل أنت متأكد أنك لا يمكن استخدام هذا الوقت لتعلم وORM؟ يجب أن يشعر أي مبرمج اضطر لكتابة التعليمات البرمجية باستمرار لقطع كعكة (ADO.NET مثل تعبئة طرق)، يمكن أن يستغرق بسرعة الفرح من البرمجة!

نصائح أخرى

سوف

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

ويمكنك نقل كود استخراج القيم من قارئ البيانات إلى المساعد فئة أو إلى طرق الإرشاد.

ومنها مثلا:

 public int GetIntOrDefault(this DataReader dr, string fieldName, int defaultValue){
     var value = dr.GetOrdinal(fieldName);
     return (!dr.IsDBNull(value)) ? dr.GetInt32(value) : defaultValue;
 }

 internal SomeObject FillDataReader(IDataReader dr)
 {
    SomeObject obj = new SomeObject ();
    obj.ID = dr.GetInt32OrDefault("objectID", 0); // 1 line instead of 4
    ...
    return obj;
 }

وهذا من شأنه معالجة لكم لفترة من الوقت، على الرغم من أنه أوصى لمحاولة بعض ORM. يبدو أن IBatis تكون سهلة الاستخدام في التطبيق الخاص بك كما كنت قد استثمرت الكثير في الخام SQL. والعديد من ORMs الأخرى هي سهلة للغاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top