سؤال

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

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

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

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

تحرير:كما بلير أشار إلى هذا هو الى حد كبير نفس السؤال هنا.

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

المحلول

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

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

تحرير:علما أن هذا السؤال هو ما يقرب من نسخة مكررة من أن المجلدات في حل تتناسب مع مساحة?

نصائح أخرى

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

عند العمل في Visual Studio IDE يميل إلى إدخال مساحة جديدة عند إضافة مجلد جديد إلى شجرة المشروع.

هنا رابط مفيد من MSDN:

مساحة تسمية التوجيهية

القاعدة العامة في تسمية مساحات هو استخدام اسم الشركة تليها التكنولوجيا اسم اختياريا ميزة التصميم على النحو التالي.
CompanyName.TechnologyName[.ميزة][.تصميم]

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

تحرير:

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

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

DefaultNamespace.FolderName.ClassName

بالطبع يمكنك تغيير الافتراضي مساحة المشروع ، الطبقات أن اسمه بأي طريقة تشاء.

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

من المهم أيضا أن نتذكر أن VS حل له أي تأثير على رمز أي.لا يبنى.مقابل حلول ليست سوى وسيلة إلى مجموعة المشاريع ؛ إنه المشاريع التي يتم بناؤها وتحولت إلى Dll.

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

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

لماذا هذا مهم ؟ التفكير .NET 2.0, 3.0, 3.5..صافي 3.0 هو الأساس .NET 2.0 مع المزيد من الجمعيات و 3.5 يضيف بعض الجمعيات.هكذا على سبيل المثال،.NET framework 3.5 يضيف DataPager التحكم هو عنصر تحكم ويب و يجب أن تكون مجمعة في System.Web.UI.WebControls.إذا مساحات و المواقع المادية كانت متطابقة ، لا يمكن أن يكون لأنه في الجمعية.

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

(أيضا لا يوجد شيء خاطئ مع وجود الخاص بك المادية والمنطقية تخطيطات جميلة مماثلة.)

في الواقع،.صافي البيئة يسمح لك لرمي الخاص بك التعليمات البرمجية في IDE/الملفات مثل السباغيتي ضد الجدار.

هذا لا يعني أن يعني هذا النهج هو عاقل, ومع ذلك.عموما فكرة جيدة أن العصا مع project.foldername.Class النهج الذي تم ذكره مسبقا.أيضا فكرة جيدة للحفاظ على جميع الطبقات من مساحة واحدة في نفس الفئة.

في جافا ، يمكنك أن تفعل مجنون أشياء من هذا القبيل وكذلك على كل من "المرونة" التي تريد ، ولكن الأدوات تميل إلى نحبذ ذلك.بصراحة واحدة من أكثر الأمور المربكة بالنسبة لي في يجري .صافي العالم كان مجرد كم مهمل/تتعارض يمكن أن يكون هذا بفضل الفقيرة نسبيا التوجيه.من السهل أن تنظيم الأمور sanely مع القليل من التفكير, على الرغم من.:)

الفرق هو أن .صافي مساحات قد لا تفعل الكثير مع جافا حزم.

.صافي مساحات بحتة لإدارة التعريفي نطاق ولها أن تفعل شيئا مع الملفات أو المشاريع أو مواقعها.

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

من السهل جدا.

اختيار اسم أم لا/كم '.' seperators استخدام هو تماما متروك لكم.

مقابل التخلف إلى إضافة .foldernames إلى مساحات فقط حاول أن تكون مفيدة.

يشرح هذا المقال مساحات جيدا:http://www.blackwasp.co.uk/Namespaces.aspx

كما أن لديها مثال اصطلاح التسمية نحو النهاية ، على الرغم من أن اسمك الاتفاقية هو قرارك!;)

وقال أن معظم الأماكن التي عملت في الناس عملت مع بداية مع اسم الشركة التي المعقول ، كما أنه يجعل typenames أن الشركة مستقلة (منفصلة عن غيرها من المكتبات والباعة مفتوحة المصدر projcts.... الخ)

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

أنا عادة إضافة مجلد لكل مساحة في المشروع ، عش لهم حسب نفس التسلسل الهرمي (MyApp.عرض.الحوارات على سبيل المثال)

مساحات بحتة الدلالي.في حين أنها عادة ما تعكس بنية مجلد على الأقل عند استخدام Visual Studio IDE, أنها لا تحتاج إلى.

هل يمكن أن يكون نفس الاسم المشار إليه في مكتبات متعددة القبيح ولكن صحيح.

لقد نظرت دائما مصدر الملف المنظمة المعرفين إلى الطبقات كائنات منفصلة اثنين المشاكل.أنا أميل إلى إبقاء الطبقات ذات الصلة في مجموعات ، ولكن ليس في كل مجموعة يجب أن تكون مساحة الاسم.مساحات موجودة (أكثر أو أقل) من أجل حل مشكلة اسم الصراعات في شقة-مساحة لغات مثل C, أنت لا تستطيع المشي على قدمين دون التعثر على معرفات مثل mycompany_getcurrentdate أو MYCGetCurrentDate, لأن خطر الصراع مع وظيفة أخرى في طرف ثالث (أو النظام) المكتبة هو أنه أصغر من ذلك بكثير.إذا قمت بإنشاء مجموعة أو مساحة لكل المنطقي الفصل ، سوف تحصل على (جافا على سبيل المثال) من الدرجة أسماء مثل java.lang.primitivewrapper.numeric.Integer, الذي هو الى حد كبير مبالغة.

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