سؤال

هل استخدام رمز الجيل أدوات (وبصرف النظر عن تلك المستخدمة لتوليد الوكلاء من المصممين المدمج في visual studio)?

ما هو الجزء(s) من التطبيق الخاص بك هل يولد ؟

هل عادة لفة الخاص بك المولد ؟ إذا كان الأمر كذلك ، ما هو نوع من مولد تكتب (asp قوالب coddom.... الخ).إن لم يكن, ما 3rd الطرف الأدوات التي تستخدمها ؟

أنا أعمل حاليا على بعض المشاريع اللي تبونه كل استخدام التعليمات البرمجية المخصصة-مولد الذي يعالج كل شيء من إنشاء قاعدة البيانات بنية الكيانات التجارية ، الدال ، BLL.أنا غريبة عن تجارب الشعوب الأخرى مع هذه الأنواع من الأدوات.

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

المحلول

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

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

التعليمات البرمجية التي يحصل إنشاؤها عند بناء نموذج Windows في Visual Studio يتبادر إلى الذهن.يمكنك إلقاء نظرة على التعليمات البرمجية التي تم إنشاؤها إذا كنت تريد, ولكن انها فكرة أفضل لا.الانتقال إلى التعريفي اللغة مع WPF كانت متفوقة ، ومع ذلك ، لأنه أنظف وأكثر كفاءة في التعامل مع التعريفي التعليمات البرمجية برمجيا من الضروري رمز.

أنها يجب أن تفعل نفس الشيء مع LINQ إلى SQL الطبقات.انهم في حاجة الى التعريفي لغة الطبقات التي لديها فقط خصائص و لا مخصص السلوك.ربما من شأنه أن يجعل من الأسهل لجعل تلك الطبقات الكيان ديناميكية--تغيير تلقائيا عندما تقوم تغييرات مخطط قاعدة البيانات.

حاولنا استخدام CodeSmith لتوليد .NetTiers دروس لجميع الجداول في قاعدة البيانات لدينا ، ولكن ركض إلى مسألتين:

  1. .NetTiers المتضخمة ، و الشفرة التي تم إنشاؤها كانت هائلة.أعتقد رمز جيل أدوات تجعل من السهل جدا أن المخلوق feep.

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

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

نصائح أخرى

نعم ، ولكن نشير لهم كمتدربين.

لا أن نعمل في .net/web المجال ولكن الصنع رمز أجيال من أدوات المنزل المختلفة-تصميم لغات جزءا هاما من التنمية لدينا سلسلة أداة.لدينا اثنين من أهم هذه الأدوات (مع قواعد النحو و موزعي و التعاريف الرسمية) ، ومجموعة من ثانوية أحد بني على وحدات الماكرو مثل m4 و perl.كلهم تولد عادي C في النهاية ، وهو أصلا المترجمة.

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

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

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

قبل بضع سنوات, أنا جعلت القفز من التعليمات البرمجية للماكرو الجيل (أيCodeSmith) الصغير رمز جيل.

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

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

للوصول إلى البيانات, أنا لم يعد ينتج أي شيء.لقد وجدت أنه من الجيد O/R M يستبدل كل شيء كنت وضعت في طبقة الوصول إلى البيانات (أيNHibernate).نظرا إلى أنه لن أكتب أو إنشاء آخر طبقة الوصول إلى البيانات في حياتي (أرفض).

بالإضافة إلى أنني الحصول على فوائد وجود وحدة كبيرة اختبار جناح, من بين أمور أخرى

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

<ActiveRecord("Kiwi")> _
Class CKiwi
End Class

و CKiwi سوف يكون الحمل(التاسع As Int32) والالتزام () ، و الحقول/خصائص كل عمود المعرفة الأساسية مخطط الكيوي الجدول.فإنه يبقى لنا من الحاجة إلى ضخمة O/R M المكتبات, ولكن لا يزال يسمح لنا بسرعة إضافة جدول إلى منتجاتنا.

رمز جيل في روح المجمعين يمكن أن تكون كبيرة.رمز جيل في روح من "المعالجات" وقد موحد تحولت إلى أن تكون فكرة سيئة.

اعتدنا على استخدام CodeSmith لتوليد لدينا NHibernate hbms ، والكيانات عدد قليل من الأشياء الأخرى.بعد حين لقد سئمت من هذا التدفق لذلك نحن تخلى عنه.

T4 مولد مجانية و تستحق النظر عن جيل.

ونحن لا تزال تستخدم القلعة CodeGenerator عن القطار الكهربائي الرابط جيل.

  1. نحن نستخدم رمز مولدات استثناءات
  2. توليد داو لعمليات الخام
  3. استخدام JAXB إلى genereate رمز
  4. استخدام XDoclet إلى genereate EJB المحلية/واجهات المنزل
  5. استخدام سرعة قوالب لإنشاء وثائق ونماذج الأعمال
  6. استخدام Apache محور لتوليد WSDL بذرة

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

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

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

انظر الأدوات لبناء حالات الاختبار على سبيل المثال واحد.

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

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

ونحن أيضا إنشاء خدمات ويب بشكل صحيح مع واجهة فلاش-أيمعالجة الاستثناء في نحو عاقل.

أخيرا لدينا استثناء مولد أن يأخذ العمل الشاق استثناء أفضل الممارسات (طن من المنشئات ، الخ...)

على صاحب العمل السابق كان لدينا نابعة من الداخل VB.NET تطبيق تحويل XML Schema Definition file (XSD) في ثابت C++ المكتبة.هذا يجعل من الأسهل بكثير للعمل مع C++ أنواع البيانات (منطقي, std::string ، الخ) ، و كل من للاهتمام البرمجية XML كانت مخبأة داخل هذه الفئات التي تم إنشاؤها.

بدأنا باستخدام الكؤوس هنا في المكتب.سابقا, كان لدينا مجموعة من JSF/السبات الخام الجيل البرامج النصية.

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

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

لقد استعملت واحد لتوليد تسلسل البيانات الكائنات التي يمكن إصلاحه عبر منصات مختلفة (ويندوز, لينكس, سولاريس, ماك, bsd, الخ).كان في الحل.

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

من أن jUnit الاختبار سوف تولد.جميل.

إلا أنه لا يوجد شخص واحد يهتم على استخدامها, و لا تجمع أي حالات الاختبار whatseover.

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

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

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

اذا كانت مهتمة في LLBLGEN ، والتي هي ممتازة ، قد أيضا تقييم دون سرعة الصوت.وربما حتى نرى ما روب Conery عن أي تداخل أو تفاعل بين سرعة الصوت و t4.

كتبت استخدام Xslt بناء جيل رمز أداة. http://perfectstorm.codeplex.com/

هذا يستخدم جذر واحد xml نموذج لتوليد الدال ، procs الجداول.

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

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