نمط التصميم لتحويل نوع واحد من هيكل الشجرة إلى آخر؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

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

أحتاج إلى تحويل تلك الفئة إلى عنصر تحكم ASP.NET TreeView.كل عقدة في شجرة الإدخال هي عقدة في شجرة الإخراج، مع مجموعة خصائص تعتمد على نوع العقدة.لا أريد أن تعرف فئات شجرة الإدخال فئات واجهة المستخدم، لذلك لا يمكنني كتابة طريقة "ToTreeViewNode ()" فيها.يوجد حاليًا 4 أنواع من فئات العقد الملموسة، اثنان منها مركبان (يحتويان على عقد فرعية) واثنان منها أوراق.قد يتغير ذلك في المستقبل.

يبدو الأمر كما لو أن هناك نمط تصميم هنا أريد استخدامه، هل يمكنك مساعدتي في العثور عليه؟

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

المحلول

الزوار ربما، على السير شجرة المدخلات وبناء شجرة UI المقابلة؟

نصائح أخرى

إن .NET الخاص بي صدئ بعض الشيء، ولكن ما يمكنك فعله هو إنشاء فئة فرعية منفصلة من TreeNodeCollection وربما TreeNode، ومنحهم حق الوصول إلى البنية الخاصة بك لك TreeNodeCollection إلى خاصية العقد الخاصة بـ TreeViewControl.

سيقوم برنامج تضمين TreeNodeCollection بتحويل البنية الخاصة بك إلى بنية TreeViewControl.من المحتمل أن تحتوي فئة TreeNode على مرجع إلى العقد الخاصة بك، ولكنها ستحول العقد الخاصة بك إلى TreeNodes.

بمعنى آخر، من خلال تنفيذ هاتين الواجهتين، يمكنك تكييف واجهة النموذج الخاص بك مع تلك التي يستخدمها TreeViewControl،

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

يرى نمط المحول

لست متأكدًا مما تحاول تحقيقه، ولكن (كما أفهمه) أعتقد أنك إذا كنت ستستخدم كليهما:

  1. مركب - للعقد (الشجرة)
  2. الإستراتيجية - لتنفيذ رسم "الخوارزمية"

لذلك سيكون لديك:

public class Node
{
   public IDraw genericDrawing;
   public Node[] Childs;
   public Node() { //init you genericDrawinf }
   public void Draw() 
   {
      genericDrawing.Draw(this);
      foreach (Node child in Childs)
      {
         child.Draw();
      }
   }
}

public interface IDraw
{
    void Draw(Node node);
}
public class SimpleDraw : IDraw
{
    public void Draw(Node node)
    {
       // code your stuf in here.
    }
}

الشيء العظيم هو:

  1. لا تحتاج إلى رسم متكرر، كل واحد يرسم نفسه
  2. يمكن أن تتغير استراتيجية الرسم الخاصة بك أثناء وقت التشغيل أو أثناء مثيل كائن
  3. يمكنك توسيع نطاق التسلسل الهرمي لكل فئة من فئاتك دون أي تبعية في البنية الأخرى.
  4. فكر في الأمر مثل عناصر التحكم الموجودة في نماذج الويب الخاصة بك
  5. علاوة على ذلك، فإن كل كائن هو (SRP) مبدأ المسؤولية الفردية

يتمتع.

ومن المؤكد يبدو لي ان كنت تريد استخدام نموذج للرؤية وحدة تحكم هنا. الهيكل الخاص خريطة الشجرة هو على الارجح النموذجي، عرض هو تحكم TreeView - ربما كنت بحاجة إلى إضافة فئة تحكم من نوع لإدارة التفاعل بين البلدين

أتمنى أن يكون سؤالك صحيحا:

من "O'Reilly - تصميم أنماط الواجهات لتصميم التكرار الفعال"

لقد حصلت على هذين النمطين المرتبطين عمومًا بالأشجار:

  • "قوائم متتالية"
  • "الخريطة الهيكلية"

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

لم أجد أي روابط لهذه الأنماط لذا أعتقد أنك ستحتاج إلى التحقق من الكتاب في المكتبة المحلية.لقد عثرت على صفحة الويب هذه والتي قد تحتوي على بعض الآباء لمساعدتك ولكنني قمت بالتحقق منها وهي لا تتضمن هذين الاثنين، أو تلك الموجودة في الفصل 6.http://www.welie.com/patterns/

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