كيف يمارس المبرمجون إعادة استخدام التعليمات البرمجية

StackOverflow https://stackoverflow.com/questions/237733

  •  04-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

اعتمادا على حجم المشروع يمكن تغيير الجواب.

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

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

يمكنك أيضًا محاولة البحث في ORM أو DAAB أو إلى مجموعة الأنماط والممارسات

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

الآن للحصول على مثال الكود الزائف الخاص بي:

Function GetCustomer(ID) as Customer
   Dim CMD as New DBCmd("SQL or Stored Proc")
   CMD.Paramaters.Add("CustID",DBType,Length).Value = ID
   Dim DHelper as New DatabaseHelper
   DR = DHelper.GetReader(CMD)
   Dim RtnCust as New Customer(Dx)
   Return RtnCust
End Function

Class DataHelper
  Public Function GetDataTable(cmd) as DataTable
    Write the DB access code stuff here.
    GetConnectionString
    OpenConnection
    Do DB Operation
    Close Connection
  End Function
  Public Function GetDataReader(cmd) as DataReader
  Public Function GetDataSet(cmd) as DataSet
  ... And So on ...
End Class

نصائح أخرى

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

وخذ printf المتواضع، على سبيل المثال. تخيل لو لم يكن لديك printf، وإلا قد write، أو شيئا من هذا القبيل:

//convert theInt to a string and write it out.
char c[24];
itoa(theInt, c, 10);
puts(c);

والآن هذه تمتص مضطر أن أكتب في كل مرة، وهو في الواقع نوع من عربات التي تجرها الدواب. لذلك قرر بعض مبرمج الذكية انه كان متعبا من هذا وكتب وظيفة أفضل، وذلك في ضربة واحدة الاشياء الطباعة المعياري.

printf("%d", theInt);

وأنت لا تحتاج إلى الحصول على الهوى كما printf مع انها حجج variadic وسلسلة التنسيق. حتى مجرد روتين بسيط مثل:

void print_int(int theInt)
{
    char c[24];
    itoa(theInt, c, 10);
    puts(c);
}

وسوف تفعل خدعة nickely. بهذه الطريقة، إذا كنت ترغب في تغيير print_int لطباعة دائما إلى ستدير هل يمكن تحديثه ليكون:

void print_int(int theInt)
{
    fprintf(stderr, "%d", theInt);
}

وسيكون الآن سحرية تتم طباعة كل ما تبذلونه من الأعداد الصحيحة إلى الخطأ المعياري.

هل يمكن حتى ذلك الحين حزمة تلك الوظيفة وغيرها تكتب تصل إلى المكتبة، والذي هو مجرد مجموعة من التعليمات البرمجية التي يمكن تحميل في لبرنامجك.

وبعد ممارسة إعادة استخدام التعليمات البرمجية هو السبب في أنك حتى وجود قاعدة بيانات للاتصال: شخص ما خلق بعض رمز لتخزين السجلات على القرص، إعادة صياغة عليه حتى كانت صالحة للاستعمال من قبل الآخرين، وقرر أن نسميها قاعدة بيانات

لا تظهر المكتبات سحرية. يتم إنشاؤها من قبل المبرمجين لجعل حياتهم أسهل والسماح لهم بالعمل بشكل أسرع.

ضع التعليمات البرمجية في روتين واستدعاء الروتين كلما أردت أن التعليمات البرمجية ليتم تنفيذها.

وراجع مارتن فاولر كتاب على <لأ href = "HTTP: // داخلي. wikipedia.org/wiki/Refactoring "يختلط =" نوفولو noreferrer "> إعادة بيع ديون أو بعض المتعلقة إعادة بيع ديون العديد من موارد الإنترنت (أيضا على ستاكوفيرفلوو)، لمعرفة كيف يمكن تحسين التعليمات البرمجية التي لديها رائحة الازدواجية.

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

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

القاعدة الأساسية الجيدة هي إذا استخدمت نفس القطعة ثلاث مرات، ومن الواضح أنه من الممكن تعميمها، بدلاً من جعلها إجراء/وظيفة/مكتبة.

ومع ذلك، مع تقدمي في السن، وزيادة خبرتي كمطور محترف، أصبحت أكثر ميلًا إلى رؤية إعادة استخدام التعليمات البرمجية على أنها ليست دائمًا أفضل فكرة، وذلك لسببين:

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

  2. في مؤسسة أكبر (أنا عضو فيها)، إذا كان عليك الاعتماد على فريق خارجي (سواء داخلي أو طرف ثالث)، فقد تواجه مشكلة.مستقبلك إذن يعتمد على تمويلهم ومواردهم.لذلك يمكن أن يكون استخدام الكود أو المكتبة الأجنبية عبئًا كبيرًا.وبطريقة مماثلة، إذا قمت بمشاركة جزء من التعليمات البرمجية مع فريق آخر، فيمكنهم بعد ذلك أن يتوقعوا أنك ستحافظ عليه.

ومع ذلك، لاحظ أن هذه الأسباب هي أشبه بأسباب تجارية، لذلك في المصادر المفتوحة، من الجيد دائمًا أن تكون قابلة لإعادة الاستخدام.

لكي تتمكن من إعادة استخدام التعليمات البرمجية، عليك أن تصبح خبيرًا في...

  1. تسمية الأشياء بأسماء تدل على جوهرها.هذا هو حقا مهم حقا
  2. التأكد من أنه يفعل شيئًا واحدًا فقط.يعود هذا حقًا إلى النقطة الأولى، إذا لم تتمكن من تسميتها بجوهرها، فغالبًا ما تفعل الكثير.
  3. تحديد موقع الشيء في مكان منطقي.مرة أخرى، يعود هذا إلى القدرة على تسمية الأشياء بشكل جيد والتقاط جوهرها...
  4. تجميعها مع الأشياء التي تعتمد على مفهوم مركزي.نفس ما ورد أعلاه ولكن قال بشكل مختلف :-)

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

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

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

ونطاق الثاني، إعادة استخدام التعليمات البرمجية عبر المشاريع، يتطلب بعض مزيد من التنظيم للحصول على الفائدة القصوى. وقد تم تناول هذه المشكلة في بضعة أسئلة أخرى وهكذا على سبيل المثال. هنا و <لأ href = "الشبكي: / /stackoverflow.com/questions/145720/what-techniques-do-you-use-to-maximise-code-reuse">here .

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

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

وأعتقد أن أفضل طريقة للإجابة مشكلتك هي التي تخلق تجميع منفصلة لوظائف الهامة الخاصة بك .. وبهذه الطريقة يمكنك إنشاء طرق الإرشاد أو تعديل المساعد تجميع نفسها .. فكر في هذا وظيفة ..

وExportToExcel (تاريخ قائمة، سلسلة اسم الملف)

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

لالمثال كنت تعطي، والحل المناسب لكتابة دالة التي تأخذ كمعلمات كل ما هو عليك تحرير كلما قمت بلصق الكتلة، ثم استدعاء هذه الوظيفة مع البيانات المناسبة كمعلمات.

وومحاولة الحصول في العادة من استخدام وظائف الآخرين والمكتبات.

وعليك أن تجد عادة أن مشكلة معينة لديها، حل أنيق اختبارها جيدا.

وحتى لو الحلول تجد ليست حلا مثاليا، ربما عليك الحصول على الكثير من التبصر في المشكلة من خلال رؤية كيف يمكن للناس البعض ومعالجته.

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

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

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

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

يعتمد ذلك إلى حد ما على لغة البرمجة التي تستخدمها.في معظم اللغات يمكنك ذلك

  1. اكتب دالة، وقم بوضع معلماتها للسماح بالاختلافات
  2. اكتب كائن دالة، مع أعضاء للاحتفاظ بالبيانات المتنوعة
  3. قم بتطوير تسلسل هرمي لفئات (كائن الوظيفة؟) التي تنفذ أشكالًا أكثر تعقيدًا
  4. في لغة C++، يمكنك أيضًا تطوير قوالب لإنشاء وظائف أو فئات مختلفة في وقت الترجمة

من السهل: كلما قبض على نفسك كود نسخ لصق، اخراجه <م> على الفور (أي، لا تفعل ذلك بعد أن كنت قد CP'd بالفعل كود عدة مرات) إلى وظيفة جديدة.

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