مدى للذهاب تجاوز أساليب وخصائص ... من الفئة الأساسية مثل صافي الدرجة TreeNode

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

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا أعمل على بعض التطبيقات، يستخدم عنصر تحكم TreeView لتمثيل الكائنات الأعمال. حاليا هو الحفاظ على العلاقة بين الكائنات الأعمال وTreeNodes من خلال خاصية العلامات من TreeNode. ايم ليس سعيدا جدا مع هذا، لأنني أعتقد أن هذا العنوان هو ليس "ضيق" بما فيه الكفاية. على سبيل المثال يمكن أن يكون هناك كائن TreeNode دون كائن الأعمال التجارية، وأيضا أريد تحديث الصورة TreeNode اعتمادا على الأعمال objact الدولة. ولذلك فإنني المستمدة بلدي الطبقة TreeNode خاصة من TreeNode:

class ActionTreeNode : TreeNode
   {
      private Action mAction;

      public Action Action
      { get ... }

      public ActionTreeNode(Action action)
         : base()
      {
         if (action == null) throw new ArgumentNullException("action", "Paramter action must not be null.");

         mAction = action;
      }

    public void UpdateState()
      {
         switch (mAction.ActionState)
         {
            case ActionState.Passed:
               SelectedImageIndex = 3;
               ImageIndex = 3;
               break;
            case ActionState.Failed:
               SelectedImageIndex = 2;
               ImageIndex = 2;
               break;
            ...
         }

         return;
      }
   }

مع هذا النهج الحد الأدنى لدي ليلقي كل مرة أدعو إلى خاصية أو أسلوب من الفئة الأساسية التي تقوم بإرجاع كائن TreeNode كما هو الحال في "(ActionTreeNode) myNode.Parent". سيكون الحل لتجاوز / الكتابة كل أسلوب أو خاصية وإرجاع كائن من نوع ActionTreeNode. ما رأيك، هل هو أكثر ملاءمة لاتخاذ نهج الحد الأدنى أو أن تأخذ الجهود الرامية إلى reimplement كل الأساليب والخصائص من أجل تجنب صب؟ شكرا.

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

المحلول

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

private ActionTreeNode GetParent(ActionTreeNode node)
{
    return node.Parent as ActionTreeNode;
}

// in some method:
ActionTreeNode parent = GetParent(someNode);
if (parent != null)
{
    // the parent is an ActionTreeNode
}

ولا ننسى الاختيار فارغة على قيمة الإرجاع الرغم من ذلك، يجب على الوالدين ألا يكون ActionTreeNode ...

نصائح أخرى

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

ويصل وزنه تكلفة صنع افيريثيجن "ضيق" مع تكلفة منكم وغيرها من مطوري وجود أرضية صلبة للعمل مع.

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

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