سؤال

كيف يمكنك تنظيم التعليمات البرمجية بحيث يمكن بسهولة أن استدار عبر المشاريع التجارية دون تحمل غير الضرورية سخام?

على سبيل المثال (في .صافي) ، دعونا نقول لديك مساحات الأسماء التالية:

namespace Computers
    - Hardware
         - Motherboard
         - GPU
namespace Monitors
    - Display
         - Mirrors
namespace Peripherals
    - USB
    - PS/2
  • هل إنشاء مشروع في الأصل مساحة ثم الإشارة أن المشروع dll في المشاريع الأخرى ؟
  • هل خلق واحدة كبيرة فئة مكتبة منفذ شيء حول (حتى إذا كنت تحتاج فقط 5% من المكتبة)?
  • أو هل يمكنك فقط إنشاء ملف واحد ونسخ رمز تحتاج إلى هذا الملف ؛ الذين يحملون هذا الملف حول إلى جميع المشاريع التي تحتاج إلى تحقيق "التوصيل والتشغيل" العمارة (سيئة كما يبدو)?

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

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

المحلول

هل تقوم بإنشاء مشروع اسم مساحة الاسم الأصل ثم الرجوع إلى DLL المشروع في مشاريع أخرى؟

ليس بالضرورة. عادة ما ينتهي بهذه الطريقة لأن مكتباتي عادة ليست كبيرة جدا ولكن ستلاحظ أن Microsoft بالتأكيد لا تفعل ذلك. System.Web موجود حتى إذا لم تقم بتضمين مرجع System.Web. يمكنك فقط الحصول على المزيد من الفصول إذا قمت بذلك. تشير إلى أن مساحة الاسم SYSTEM.WEB يستخدم في العديد من DLL مختلفة.

هل تقوم بإنشاء مكتبة فئة واحدة كبيرة وميناء هذا الشيء حوله (حتى لو كنت بحاجة فقط إلى 5٪ من المكتبة)؟

نعم. مساحة القرص الصلب رخيص وأرخص من الحفاظ على الرمز الزائد.

أو، هل مجرد إنشاء ملف واحد ونسخ التعليمات البرمجية التي تحتاجها في هذا الملف؛ قم بتدوين هذا الملف في جميع المشاريع التي تحتاج إلى تحقيق بنية "التوصيل والتشغيل" (بالسوء مثل هذا يبدو)؟

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

void ShowErrorMessage(HtmlTableRow row, string message)
{
   row.Cells.Clear();
   row.Cells.Add(new HtmlTableCell());
   row.Cells[0].InnerHtml = message;
   row.Cells.Attributes.Add("class", "error");
   row.Visible = true;
}

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

نصائح أخرى

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

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

وأظل كل مكون منفصلة وحدة ، واستخدام مخضرم أن إدارة تبعيات (إنها ليست مجرد جافا, ترى هذا السؤال, Byldan هو .صافي ما يعادلها).

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

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

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

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

فقط سنتان، لا يستحق الكثير ...

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

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

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

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