דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. בניית מודאלים גנאריים

בניית מודאלים גנאריים

מתוזמן נעוץ נעול הועבר ארכיון code613m
12 פוסטים 2 כותבים 592 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים מורחק
    כתב ב נערך לאחרונה על ידי
    #3

    תודה רבה,
    את נושא הירושה והממשקים אני מכיר ואני משתמש למשל בממשק כזה:

    Imports System.ComponentModel
    
    Public Interface IRecord
    
        Inherits INotifyPropertyChanged
        Property ID As Integer
        Sub OnPropertyChanged(ByVal name As String)
    
    End Interface
    
    Public Class GenaricTable(Of TRecord As IRecord)
        ' הטבלה הגנארית
        ' יש בה כל מיני פונקציות ומאפיינים
        ' מחזיקה אוסף של רשומות מטיפוס מסויים
    
        Public WithEvents MainCollection As ObservableCollection(Of TRecord)
    
        Public WithEvents ConnectionsCollection As ObservableCollection(Of Connection)
        Public Property Sum
    
        '....
    End Class
    

    @דוד ל.ט.

    אני מאוד לא מבין את הכיוון ואת הדרך, לא הבנתי גם למה במקום באובגקט אתה לא משתמש עם המחלקה היפה שעשית (GenaricTable).
    כלומר המחלקה קונקשיין לפי איך שהתחלת אמורה להיראות ככה:

    רציתי באמת לעשות כמו שאתה מציע אבל אז נתקעתי עם השורה הבאה בתוך GenaricTable, שורה זו שכחתי להביא בהודעה הראשונה:

    Public WithEvents ConnectionsCollection As ObservableCollection(Of Connection)
    

    כלומר חייב להיות בכל טבלה אוסף של קשרי גומלין כאשר כל קשר גומלין מכיל טבלה אחת מסוג שונה מאשר הטבלה שמכילה את אוסף הקשרי גומלין. בין כל קשרי הגומלין של טבלה מסויימת יכולים להיום כמה וכמה טיפוסים שונים לגמרי.
    מה הארכיטקסטרה הנכונה בכל המבנה הזה?

    פורסם במקור בפורום CODE613 ב29/12/2013 12:58 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #4

      או: תעשה כמו שהצעתי וקונקשיין תחליף לObject.

      או: כדי להשתמש בקונקשנים בלי קאסט צור ממשק לקונקשיין ככה:

      Public Class GenaricTable(Of TRecord As IRecord)
          Public WithEvents ConnectionsCollection As ObservableCollection(Of IConnection)
      End Class
      
      Public Class Connection(Of TRecordA As IRecord, TRecordB As IRecord)
          Implements IConnection
          Public Sub New(GenaricTableOut As GenaricTable(Of TRecordA), GenaricTableIn As GenaricTable(Of TRecordB))
          End Sub
      End Class
      

      או: אתה יכול להחליט לעשות גם ככה:

      Public Class GenaricTable(Of TRecord As IRecord)
          Implements ITable
          Public WithEvents ConnectionsCollection As ObservableCollection(Of Connection)
      End Class
      
      Public Class Connection
          Public Sub New(GenaricTableOut As ITable, GenaricTableIn As ITable)
          End Sub
      End Class
      

      פורסם במקור בפורום CODE613 ב29/12/2013 15:08 (+02:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      0
      • רחמיםר מנותק
        רחמיםר מנותק
        רחמים מורחק
        כתב ב נערך לאחרונה על ידי
        #5

        תודה,
        עשיתי ממשק גם ITable וגם IConnection
        הכל עבד מצויין חוץ ממאפיין אחד ב Connection שלא התאים ל ממשק:

        'במחלקה:
        Public Class Connection(Of TRecordA As IRecord, TRecordB As IRecord)
            Implements IConnection
         Public Property MainCollectionOfTableOut As ObservableCollection(Of TRecordA) _
        Implements IConnection.MainCollectionOfTableOut
          
        End Class
        
           'בממשק:
           Property MainCollectionOfTableOut As ObservableCollection(Of IRecord)
        

        למה זה קורה? על פי סדר הממשקים זה היה אמור להתאים, ומה אפשר לעשות אם לא שוב שימוש באובג'קט?
        אם אני מבין נכון אז אע''פ שאת TRecordA אפשר להסב [=קאסט] ל IRecord
        אבל (Collection(Of TRecordA אי אפשר להסב ל (Collection(Of IRecord אולי שייך לעשות כאן העמסת אופרטור של הקאסט ?

        פורסם במקור בפורום CODE613 ב29/12/2013 17:19 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • dovidD מחובר
          dovidD מחובר
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #6
          Public Class Connection(Of TRecordA As IRecord, TRecordB As IRecord)
              Implements IConnection(Of TRecordA, TRecordB)
              Public Property MainCollectionOfTableOut As ObservableCollection(Of TRecordA) Implements IConnection(Of TRecordA, TRecordB).MainCollectionOfTableOut
              Public Property MainCollectionOfTableIn As ObservableCollection(Of TRecordB) Implements IConnection(Of TRecordA, TRecordB).MainCollectionOfTableIn
          End Class
          
          Public Interface IConnection(Of TRecordA As IRecord, TRecordB As IRecord)
              Property MainCollectionOfTableOut As ObservableCollection(Of TRecordA)
              Property MainCollectionOfTableIn As ObservableCollection(Of TRecordB)
          End Interface
          

          פורסם במקור בפורום CODE613 ב29/12/2013 17:52 (+02:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          0
          • רחמיםר מנותק
            רחמיםר מנותק
            רחמים מורחק
            כתב ב נערך לאחרונה על ידי
            #7

            זה יעזור לפתור את השאלה האחרונה אבל יקלקל בחזרה את הכל, שהרי הכל התחיל מזה שה Connection הוא עם OF וממילא היה אי אפשר לעשות אוסף של Connection ולכן עשיתי את הממשק IConnection שאין בו OF.

            פורסם במקור בפורום CODE613 ב29/12/2013 18:25 (+02:00)

            תגובה 1 תגובה אחרונה
            0
            • dovidD מחובר
              dovidD מחובר
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #8

              צודק. זה תלוי בך, אתה לא חייב לתפוש את החבל מכל הכיוונים. לא היית חייב לכתוב באינטרפייס את הפרופרטיז הללו, וגם להישאר עם הגנריות שלהם.
              אני הייתי עושה הכל עם אינטרפייס ולפחות את האוספים, ככה:

              Public Class Connection
                  Implements IConnection
              
                  Public Property MainCollectionOfTableIn As ObservableCollection(Of IRecord) Implements IConnection.MainCollectionOfTableIn
                  Public Property MainCollectionOfTableOut As ObservableCollection(Of IRecord) Implements IConnection.MainCollectionOfTableOut
              End Class
              
              Public Interface IConnection
                  Property MainCollectionOfTableOut As ObservableCollection(Of IRecord)
                  Property MainCollectionOfTableIn As ObservableCollection(Of IRecord)
              End Interface
              

              פורסם במקור בפורום CODE613 ב29/12/2013 18:46 (+02:00)

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              0
              • רחמיםר מנותק
                רחמיםר מנותק
                רחמים מורחק
                כתב ב נערך לאחרונה על ידי
                #9

                יישר כח גדול, הכל הסתדר לפי מה שבדקתי עד כעת אני לא משתמש יותר באובג'קט בזכות הממשקים,
                אני כבר מתחיל לראות באופק את Northwind ב WPF בע''ה ... 🙂

                פורסם במקור בפורום CODE613 ב29/12/2013 19:29 (+02:00)

                תגובה 1 תגובה אחרונה
                0
                • dovidD מחובר
                  dovidD מחובר
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #10

                  @רחמים

                  אני כבר מתחיל לראות באופק את Northwind ב WPF בע''ה ... 🙂

                  northwind זה אפליקציה.
                  אתה בונה אפליקציה+מסד נתונים.

                  פורסם במקור בפורום CODE613 ב30/12/2013 10:37 (+02:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  0
                  • רחמיםר מנותק
                    רחמיםר מנותק
                    רחמים מורחק
                    כתב ב נערך לאחרונה על ידי
                    #11

                    אכן אני בונה מסד נתונים גנארי, כלומר שיהיה אפשר להשתמש בו בכל תוכנית ובכל אפליקציה ואפי' עם המורכבות והיכולות המוצגות ב Northwind של אקסס.

                    פורסם במקור בפורום CODE613 ב30/12/2013 10:48 (+02:00)

                    תגובה 1 תגובה אחרונה
                    0
                    • רחמיםר מנותק
                      רחמיםר מנותק
                      רחמים מורחק
                      כתב ב נערך לאחרונה על ידי
                      #12

                      תשמע, אני ממשיך לעבוד על פיתוח המסד נתונים והממשקים האלו זה ממש כלי נפלא ביותר, אתה יכול לגשת לכל טיפוס לא משנה מה הוא יהיה ויש לי איתו שפה משותפת בזכות הממשק המשותף שיש לו עם אחרים, אתה יכול להכניס למערך שלל של טיפוס שונים העיקר שכולם תחת אותו ממשק ועם כולם אתה יכול לעבוד בלא אובג'קט ממש תענוג.
                      אין כמו OOP :smile:

                      פורסם במקור בפורום CODE613 ב01/01/2014 21:09 (+02:00)

                      תגובה 1 תגובה אחרונה
                      0

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום