ماذا علي أن أفعل إذا كان لدي نفس اسم الفئة على بمساحات مختلفة؟

StackOverflow https://stackoverflow.com/questions/816088

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أعمل على مشروع وجئت إلى ما يلي مشكلة تسمية .

وأود أن تنفيذ نمط مصنع لكنني لا أعرف أفضل namings فئة لاستخدام (أنا تغيير من واحدة إلى أخرى وانها جدا تستغرق وقتا طويلا: S).

وأنا عادة ما يذهب لمساحات لفصل <م <مجموعات من الطبقات، ولكن لي <م> مشكلة هو مع هذا قطعة معينة من التعليمات البرمجية:

class Mesh
{
    ...
};
namespace Factory
{
    class Mesh
    {
        ...
    };
}
...
Factory::Mesh meshFactory;
Mesh *mesh = meshFactory.create(...);

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

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

class Mesh
{
     ...
};
class MeshFactory
{
     ...
};
MeshFactory meshFactory;
Mesh *mesh = meshFactory.create(...);

وهكذا هناك أي التباس حول ما تقوم به كل فئة.

وأنا لا أحب الحل بسيط وهو استخدام بمساحات مختلفة وابتكار أسماء مختلفة، لأنني في نهاية المطاف باستخدام اسم مساحة لا تمييز بينهما:

class Mesh
{
    ...
};
namespace Factory
{
    class MeshFactory // I can't figure a better different name
    {
        ...
    };
}

وأنا أفضل الخيار الثاني.

هل هناك سبب قوي لماذا هو أفضل الخيار الأول؟ أم أن هناك طريقة أخرى؟ ماذا تقول أفضل الممارسات حول هذا الموضوع؟

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

المحلول

ما هي الأسباب التي تسبب لك لتسمية الطبقة شبكة "شبكة"؟

هل الطبقة المصانع التي تنتج حصة المثال مش كل نفس الأسباب؟

وإذا كان كذلك، ثم أنها ينبغي أن تكون نفس الفئة، الذي يحمل نفس الاسم.

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

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

ومساحة الاسم غير ذي صلة.

نصائح أخرى

وتذكر هذه القاعدة الذهبية "أفضل الممارسات" في تصميم OO: تسمية الفصول الدراسية بسهولة 50٪ من الحل التصميم. إذا كنت تواجه مشاكل الكيانات تسمية، فإنه يدل على أن لم يكن لديك نموذج نظري واضح في ذهنك.

لديك في التأهل تماما عند الاستخدام. استخدام الأسماء المستعارة إذا كانت أسماء مؤهلة تماما لديك طويلة جدا.

وa.Mesh b.Mesh

في عام وفي الأرض. NET (على وجه التحديد C #) وأود أن إعادة رسم خريطة الطبقة إذا كان هناك أي وسيلة من حوله (الحزب وهي 3RD):

using MyMesh = My.Mesh;
using FooMesh = Foo.Mesh;

وعدا ذلك، وأنك من الواضح أن لا نتحدث C # (يجب أن تكون المعلمة السؤال مع c ++) وأود أن استخدام مساحة الاسم الكامل عند الإشارة سواء. بينما غير مريح للاكتبه يستغرق سوى خطأ واحد لتكون سهلة.

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