Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

pattern για data class

Îåêßíçóå áðü ôï ìÝëïò Bill . Τελευταία δημοσίευση από το μέλος George J. Capnias στις 07-02-2010, 11:51. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  06-02-2010, 09:43 56971

    pattern για data class


     Υπάρχει κανένα standar pattern για να έχουμε μια κλάση με την οποία θα πέρνουμε δεδομένα απο την βάση θα κάνουμε update , delete,insert όλα σε ένα και νυκοκυρεμένα (ωστε να μην ξανα ορίζω sqldataAdapters,sqlconnections,...sqlCommands απλά να δίνω το sql statement μου και να τα κάνει όλα) ? Και αυτή η κλάση θα είναι προσβάσιμη απο παντού πχ static class.

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  06-02-2010, 12:29 56973 σε απάντηση της 56971

    Απ: pattern για data class

    Αυτό που ζητάς αν δεν κάνω λάθος είναι το λεγόμενο DAO (Data Access Object). Βέβαια δεν είναι τόσο από όπως φαντάζεσαι μιας και για να πετύχεις όλα αυτά που περιγράφεις πρέπει να συνδυαστούν πολλά πράγματα μεταξύ τους. Πρέπει για παράδειγμα να δεις τι γίνεται με τα transactions. Βέβαια μπορείς να ξεκινήσεις από κάτι απλό και μετά να το προχωρήσεις.

    My dream is to fly over the rainbow so high!!!!
  •  06-02-2010, 21:45 56978 σε απάντηση της 56971

    Απ: pattern για data class

    Μάλλον τα μπέρδεψες λίγο με την ορολογία.

    Βασικά δεν ψάχνεις για pattern αλλά για Application Block το οποίο να κάνει την δουλειά που ζητάς. Πολλές φορές, σχεδόν πάντα δηλαδή αυτά τα Application Blocks χρησιμοποιούν διάφορα patterns με σκοπό την καλύτερη οργάνωση και σχεδιασμό του κώδικα. Οπότε εσύ ψάχνεις ένα Application Block που να κάνει αυτά που ανέφερες και όχι να σχεδιάσεις κάποιο από την αρχή. οπότε θα χρειαζόσουν κάποιο Pattern.

    Όπως ίσως γνωρίζεις τον τελευταίο καιρό, έχει δηλαδή χρόνο και... έκανε την εμφάνισή του το LINQ To SQL και πιο μετά το Entity Framework τα οποία περιέχουν κώδικα αλληλεπίδρασης με την βάση και όχι μόνο. Οι γνώμες πάνω στις τεχνολογίες αυτές είναι διαφορετικές και για το αν είναι είναι έτοιμες να παίξουν τον ρόλο για τον οποίον δημιουργήθηκαν. Αξίζει όμως να ρίξεις μία ματιά σε αυτά για να δεις που θα πάνε τα πράγματα και πια μορφή θα έχουν.

    Από την άλλη δεν σου μένουν και πολλές επιλογές. Είτε θα φτιάξεις ένα μόνο σου είτε χρησιμοποίησε το Data Access Application Block της Microsoft. Αρκετά καλό με μεγάλη κοινότητα να το υποστηρίζει και το κυριότερο δωρεάν.

  •  07-02-2010, 11:51 56981 σε απάντηση της 56978

    Απ: pattern για data class

    Το System.ComponentModel namespace του .ΝΕΤ Framework προσφέρει το DataObjectAttribute που σε συνδιασμό με το DataObejctFieldAttribute και το DataObjectMethodAttribute επιτρέπουν να "στολίσεις" κλάσεις έτσι ώστε να μπορούν να χρησιμοποιηθούν από το ObjectDataSource web control, για να "γεμίσεις" γρήγορα τα DataList, DetailsView, FormView, GridView. ListView και DataRepeater web controls, να "ενεργοποιήσεις" paging, sorting, editing, και όλα αυτά χωρίς έξτρα κώδικα για το databinding.

    Πχ αν υποθέσουμε ότι ο παρακάτω κώδικας είναι μέρος ενός Data Class, που "υλοποιεί" το Repository pattern:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
        public class ProductsDataSource
        {
            AdventureWorksLTEntities _ctx;
    
            public ProductsDataSource()
            {
    
            }
    
            public DataServiceCollection<Product> FetchAll()
            {
                _ctx = new AdventureWorksLTEntities(new Uri("http://localhost:55867/AdvWorksLTDataService.svc"));
                DataServiceCollection<Product> products = new DataServiceCollection<Product>(_ctx);
                products.Load(from p in _ctx.Product
                              select p);
                return products;
            }
        }

    Για να χρησιμοποιήσεις την παραπάνω κλάση, θα πρέπει να γράψεις έξτρα κώδικα σε κάθε σελίδα που θέλεις να προσπελάσεις δεδομένα από την βάση και να γεμίσεις ένα control.

    Αν η παραπάνω κλάση μετασχηματιστεί σε:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
        [DataObject]
        public class ProductsDataSource
        {
            AdventureWorksLTEntities _ctx;
    
            public ProductsDataSource()
            {
    
            }
    
            [DataObjectMethod(DataObjectMethodType.Select, true)]
            public DataServiceCollection<Product> FetchAll()
            {
                _ctx = new AdventureWorksLTEntities(new Uri("http://localhost:55867/AdvWorksLTDataService.svc"));
                DataServiceCollection<Product> products = new DataServiceCollection<Product>(_ctx);
                products.Load(from p in _ctx.Product
                              select p);
                return products;
            }
        }

    Τότε μπορείς να την χρησιμοποιήσεις σε συνδιασμό με το ObjectDataSource control, και να μην γράψεις καθόλου αυτό το κώδικα...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems