سؤال

يجب أن أقوم ببعض التطويرات المهمة في نظام ASP كبير وقديم ومليء بالسباجيتي.لقد كنت بعيدًا عن ASP لفترة طويلة، وأركز طاقاتي على تطوير Rails.

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

هل هناك إطار عمل MVC جدير بالاهتمام لـ ASP؟أو أفضل الممارسات حول كيفية إخراج منطق الأعمال من المشاهدات على الأقل؟(أتذكر أنني قمت بالكثير من عمليات التضمين في الماضي - هل ما زالت هذه هي الطريقة للقيام بذلك؟)

أرغب في إجراء بعض اختبارات الوحدات لمنطق الأعمال أيضًا، ولكن ربما أطلب الكثير؟

تحديث:

يوجد أكثر من 200 برنامج نصي لـ ASP في المشروع، يبلغ طولها بضعة آلاف من الأسطر؛) آه!

قد نختار "إعادة الكتابة الكبيرة" ولكن حتى ذلك الحين، عندما أقوم بتغيير الصفحة، أريد قضاء بعض الوقت الإضافي في تنظيف السباغيتي.

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

المحلول

الافتراضات

الوثائق الخاصة بنظام Classic ASP خفيفة نوعًا ما.

الإدارة لا تبحث عن إعادة كتابة.

نظرًا لأنك كنت تقوم بعمل روبي على القضبان، فإن ASP.NET الخاص بك (VB/C#) مقبول في أحسن الأحوال.

تجربتي

لقد ورثت أيضًا نظام ASP الكلاسيكي الذي تم دمجه معًا طوعًا أو كرها بواسطة أنواع exex-vba السابقة.كان هناك الكثير من هذه الأشياء <font size=3>crap</font> (وأحيانًا تكون علامات الإغلاق مفقودة؛أرجج!).على مدار عامين ونصف، أضفت نظام أمان ومكتبة مشتركة وCSS+XHTML وتمكنت من إجبار الشيء على التحقق من صحة xhtml1.1 (بدون نوع mime مناسب، لسوء الحظ) وقمت ببناء نظام تقارير قوي إلى حد ما. يستخدم يوميا من قبل 80 مستخدما.

لقد استخدمت jEdit، مع cTags (كما ذكر بواسطة التشويش أعلاه)، ومجموعة من المكونات الإضافية الأخرى.

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

هل تستخدم الطبقات.إنهم بدائيون للغاية (ليس لديهم وراثة)، ولكن كما قال جامتينج، يمكن أن يكونوا مناسبين.

مسافة بادئة للبرامج النصية بشكل صحيح.

تعليق

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

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

في اختبارات وحدة منطق الأعمال، الشيء الوحيد الذي وجدته ناجحًا هو إعداد مستمع xml-rpc في asp الذي يستورد المكتبة الرئيسية ويكشف الوظائف (وليس الإجراءات الفرعية) في أي من المتضمنات الفرعية للمكتبة الرئيسية، وبعد ذلك أنشئ، بشكل منفصل، نظام اختبار الوحدة بلغة ذات دعم أفضل للأشياء التي تستدعي وظائف ASP من خلال xml-rpc.أنا أستخدم لغة بايثون، لكن أعتقد أن روبي يجب أن تقوم بالمهمة.(هل هذا منطقي؟).والشيء الرائع هو أن الشخص الذي يكتب جزء اختبار الوحدة من البرنامج لا يحتاج حتى إلى إلقاء نظرة على كود ASP، طالما أن لديه أوصاف مناسبة للوظائف التي يمكن الاتصال بها، حتى يتمكن من أن يكون شخصًا بجانبك.

هناك مشروع اسمه aspunit في sourceforge ولكن الإصدار الأخير كان في عام 2004 وتم وضع علامة عليه على أنه غير نشط.لم تستخدمه أبدًا ولكنه vbscript خالص.تخبرني نظرة خاطفة على الكود أنه يبدو أن المؤلفين كانوا يعرفون ما كانوا يفعلونه.

أخيرًا، إذا كنت بحاجة إلى مساعدة، فلدي بعض الاستعداد للقيام بأعمال العمل عن بعد بموجب عقد (ربما 8 ساعات في الأسبوع كحد أقصى).اتبع مسار الارتباط للحصول على معلومات الاتصال.

حظ سعيد!هث.

نصائح أخرى

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

على فصل المنطق عن "وجهات النظر".يدعم VBScript نوعًا ما من OO مع الفئات.أميل إلى كتابة فصول دراسية تقوم بالمنطق الذي أقوم بتضمينه في صفحة asp والتي تعمل بمثابة "عرض".ثم أقوم بربط العرض مع الفصل مثل اسم المستخدم:<%= MyAccount.UserName %>.يمكن أن تحتوي فئة MyAccount أيضًا على طرق مثل:MyAccount.Login() وما إلى ذلك.

نوع بدائي، ولكن على الأقل يمكنك تغليف بعض التعليمات البرمجية وإخفائها من HTML.

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

إعادة هيكلة ASP

فيما يتعلق بالاتجاه المستقبلي، لن أستهدف نماذج الويب ASP.NET، وبدلاً من ذلك سأختار إطار عمل MVC الجديد من Microsoft وهو إضافة إلى ASP.NET) سيكون الانتقال إلى هذا من ASP الكلاسيكي أسهل بكثير.

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

لقد وجدت أيضا العمل بفعالية مع الكود القديم بقلم مايكل فيذرز ليكون دليلاً مفيدًا لإيجاد طرق لاختبار بعض هذه التعليمات البرمجية القديمة.

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

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

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

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

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

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

هذا قديم جدًا، لكن لم أستطع مقاومة إضافة سنتي.إذا كان يجب عليك إعادة الكتابة، ويجب عليك الاستمرار في استخدام ASP الكلاسيكي:

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

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

أعلم مدى صعوبة فعل الشيء الصحيح، ويزداد الأمر صعوبة عندما يعرف المدير المسؤول كل شيء ويخاف من كل شيء بخلاف أسوأ طريقة ممكنة.

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

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

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

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