سؤال

يمكنني استخدام MyGeneration جنبا إلى جنب مع nHibernate لخلق الأساسية بوكو كائنات XML تعيين الملفات.لقد سمعت بعض الناس يقولون انهم يعتقدون رمز مولدات ليست فكرة جيدة.ما هو أفضل تفكر ؟ هو مجرد رمز جيل سيء عندما يولد الآلاف من خطوط غير مفهومة الرمز ؟

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

المحلول

لا ينبغي (كما التعميم) يمكن أن تستخدم

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

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

-- =============================================================
-- === Foobar Module ===========================================
-- =============================================================
--
--         === THIS IS GENERATED CODE.  DO NOT EDIT. ===
--
-- =============================================================

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

نصائح أخرى

رمز مولدات كبيرة ، سيء سيء.

معظم الردود في هذه الصفحة هي على غرار "لا, لأنه في كثير من الأحيان الشفرة التي تم إنشاؤها ليست جيدة جدا."

هذا هو سوء الإجابة لأن:

1) مولدات أداة مثل أي شيء آخر - إذا كنت إساءة لهم ، لا ألوم أداة.

2) المطورين يميلون إلى يفخرون على قدرتها على كتابة رموز كبيرة مرة واحدة, ولكن لا يمكنك استخدام رمز المولدات واحد من المشاريع.

نحن نستخدم نظام توليد كود على الثبات في جميع جاوة المشاريع الآلاف من الفئات التي تم إنشاؤها في الإنتاج.

كمدير أحبهم لأن:

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

2) التوحيد:كل المطورين رمز مطابق في هذا الصدد حتى لا يكون هناك أقل بكثير من الرجل الذي تعلم عند التقاط مشروع جديد من زميل في العمل.

3) التطور:إذا وجدنا طريقة أفضل للقيام بالأشياء نتمكن من تحديث القوالب و التحديث 1000 من الطبقات بسرعة وباستمرار.

4) الثورة:إذا كنا التحول إلى أشكال مختلفة من استمرار النظام في المستقبل ثم حقيقة أن كل الطبقة الثابتة لديه متطابقة تماما مع API يجعل مهمتي أسهل بكثير.

5) الإنتاجية:انها مجرد بضع نقرات لبناء المستمرة وجوه النظام من البيانات الوصفية - وهذا يوفر الآلاف من مملة المطور ساعات.

رمز جيل مثل استخدام مترجم - على أساس فردي كنت قد تكون قادرة على كتابة أفضل الأمثل لغة التجميع, ولكن على أعداد كبيرة من المشاريع التي كنت أود أن يكون بدلا من المترجم تفعل ذلك بالنسبة لك أليس كذلك ؟

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

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

ومشكلة واحدة هي إذا لم الأداة تسمح لك لحماية التغييرات التي قمت بها إلى رمز المعدلة ثم سيتم الكتابة التغييرات.

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

رمز المولدات يمكن أن يكون نعمة بالنسبة الإنتاجية, ولكن هناك عدد قليل من الأشياء للبحث عن:

تمكنك من العمل بالطريقة التي كنت ترغب في العمل.

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

تشغيل كجزء من العادية بناء.

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

لا تثبيت

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

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

لا تحرير الانتاج

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

كما يجب إخراج بوضوح أنه هو إنشاء ملف & لا ينبغي تحريرها.

للقراءة الانتاج

الإخراج يجب أن تكون مكتوبة & مهيأ بشكل جيد.كنت تريد أن تكون قادرة على فتح الناتج قراءتها دون الكثير من المتاعب.

#line

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

وموقفي هو أن المولدات رمز ليست سيئة، ولكن يستخدم العديد منهم.

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

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

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

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

إذا لها رمز مولد المركزية كوبول أن فران تاركينتون يحاول أن يبيع لك ثم على الاطلاق نعم!

لقد كتبت بعض المولدات رمز قبل أن نكون صادقين أنها أنقذت مؤخرتي أكثر من مرة!

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

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

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

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

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

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

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

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

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

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

وتوليد كود سيئة عندما يجعل البرمجة أكثر صعوبة (IE، الشفرة التي تم إنشاؤها على نحو رديء، أو كابوس الصيانة)، ولكنها جيدة عندما جعل برمجة أكثر كفاءة.

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

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

ومولدات رمز ليست سيئة، ولكن أحيانا يتم استخدامها في الحالات عند وجود حل آخر (أي instantiating مليون الكائنات عند مجموعة من الأشياء يمكن أن يكون أكثر مناسبة وأنجزت في بضعة أسطر من التعليمات البرمجية).

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

ولكن في حد ذاتها، المولدات رمز ليست سيئة.

و-Adam

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

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

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

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

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

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

والصيانة <> سهلة أو سريعة عملية الترميز

وأنا استخدم جيلي مع Spaces الكيان وليس لدي أي مشاكل معها. إذا كان لدي تغيير المخطط أنا فقط تجديد الطبقات وكل شيء يعمل على ما يرام.

وأنها بمثابة عكاز التي يمكن تعطيل قدرتك على الحفاظ على المدى الطويل البرنامج.

وكانت المجمعين C ++ الأولى مولدات التعليمات البرمجية التي بصق كود C (CFront).

ولست متأكدا إذا كان هذا هو حجة لصالح أو ضد المولدات رمز.

وأعتقد أن ميتشل قد ضرب على رأسه. رمز جيل له مكانه. هناك بعض الظروف حيث انها أكثر فعالية في الحصول على جهاز الكمبيوتر للقيام بهذا العمل بالنسبة لك! ويمكن أن تعطيك الحرية لتغيير رأيك حول تنفيذ مكون معين عندما تكلفة وقت إجراء التغييرات كود صغيرة. بطبيعة الحال، فإنه لا يزال من المحتمل المهم أن نفهم الإخراج مولد رمز، ولكن ليس دائما. كان لدينا مثال على المشروع الذي انتهى لتوه من حيث عدد التطبيقات C ++ اللازمة للتواصل مع C # التطبيق عبر أنابيب الاتصال المسماة. كان من الأفضل بالنسبة لنا أن نستخدم صغيرة وبسيطة، والملفات التي تحدد الرسائل، وجميع الطبقات والشفرة التي تم إنشاؤها لكل جانب من الصفقة. عندما مبرمجا تعمل على مشكلة X، وكان آخر شيء يحتاجونه للقلق حول تفاصيل implentation من الرسائل وذاكرة التخزين المؤقت ضرب المحتم أن يستتبع.

وهذا هو السؤال سير العمل. ASP.NET هو مولد التعليمات البرمجية. محرك XAML تحليل الواقع يولد C # قبل ان يحصل على تحويلها إلى MSIL. عندما يصبح مولد رمز منتج خارجي مثل CodeSmith أن يتم عزل من العمل تطوير الخاص بك، يجب إيلاء عناية خاصة للحفاظ على المشروع الخاص بك متزامنة. على سبيل المثال، إذا كانت الشفرة التي تم إنشاؤها ORM الإخراج، وإجراء تغيير في مخطط قاعدة البيانات، سوف إما أن تتخلى إما تماما مولد رمز أو الاستفادة من قدرة C # الصورة آخر للعمل مع فئات جزئية (والتي تمكنك من إضافة أعضاء وظائف لفئة القائمة دون وراثة عليه).

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

وأعتقد أن الدواء الشافي لهذا الغرض <م> المولدات رمز يمكن أن يتمتع في الروتين قبل التحويل البرمجي. C # وغيرها من اللغات. NET يفتقر هذا، على الرغم من ASP.NET يتمتع به وهذا هو السبب، مثلا، دون سرعة الصوت يعمل بشكل جيد جدا لASP.NET ولكن ليس أي شيء آخر. دون سرعة الصوت يولد C # رمز في بناء وقت فقط قبل ركلات تجميع ASP.NET العادية في.

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

وجون

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

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

وهذا هو IMHO أفضل نهج. يبدو طوباوية؟ على الأقل أنا أعلم أنها ليست؛) وسيكون في المستقبل القريب اقول

.

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

ومولدات كود كبيرة على افتراض أنه هو مولد رمز جيد. العمل خصوصا ج ++ / جافا وهو مطول جدا.

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