سؤال

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

أنا أعمل على تطبيق اختبار الانحدار.أعرض نموذجًا على الشاشة ووفقًا للمستخدم الذي قام بتسجيل الدخول إلى التطبيق، يجب أن تكون بعض الحقول للقراءة فقط.لذا يمكنني تجريد كائن حقل ويمكنني تجريد كائن مستخدم ولكن ما النمط الذي يجب أن أنظر إليه لوصف تقاطع هذين المفهومين؟بمعنى آخر، كيف يجب أن أصف أنه بالنسبة للحقل 1 والمستخدم أ، يجب أن يكون الحقل للقراءة فقط؟يبدو أن القراءة فقط (أو لا) يجب أن تكون خاصية للفئة Field ولكن كما قلت، يعتمد ذلك على المستخدم الذي ينظر إلى النموذج.لقد فكرت في مصفوفة بسيطة ثنائية الأبعاد (e.ز.ReadOnly[Field,User] = True) ولكني أريد التأكد من أنني اخترت البنية الأكثر فعالية لتمثيل ذلك.

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

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

المحلول

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

إنها أيضًا طريقة رائعة لالتقاط الاختبارات، انظر ملائم .

في حالتك شيء مثل:

Field1ReadonlyRules = {
    'user class 1' : True,
    'user class 2' : False
}

field1.readOnly = Field1ReadonlyRules[ someUser.userClass ]

جانبا ربما تريد أن تكون نموذجا كلاهما المستخدمين وفئات/أدوار/مجموعات المستخدمين بدلاً من الجمع بينهم.يلتقط المستخدم عادة من (المصادقة) أثناء التقاط المجموعات/الأدوار ماذا (الأذونات والإمكانيات)

نصائح أخرى

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

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

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