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

 

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

Χρήση τιμής ενός control σε μία DAL κλάση

Îåêßíçóå áðü ôï ìÝëïò Ηλίας Κεκάκος. Τελευταία δημοσίευση από το μέλος KelMan στις 16-01-2007, 10:11. Υπάρχουν 15 απαντήσεις.
Σελίδα 1 από 2 (16 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  12-01-2007, 14:53 23403

    Χρήση τιμής ενός control σε μία DAL κλάση

          Έχω 2 DateTime controls όπου ο χρήστης δίνει τις ημερομηνίες ΑΠΟ ΕΩΣ τις οποίες τις χρησιμοποιώ στο SQL select μιάς DAL κλάσης. Όταν προσπάθησα να πάρω τις τιμές τους με το MY.FORMS.FORM1.DateTime1.Text αυτή ήταν null. Βέβαια μπορώ να περάσω τις 2 τιμές σαν παραμέτρους όταν καλώ την function της κλάσης, αλλά το ερώτημά μου είναι γιατί δεν λειτουργεί το MY.FORMS...? Υπάρχει καμία εξήγηση γι’ αυτό;

      Ευχαριστώ
  •  12-01-2007, 15:01 23405 σε απάντηση της 23403

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Κατ΄αρχήν για να πάρεις την τιμή ενός DateTime control νομίζω οτι πρέπει να χρησιμοποιήσεις το Value και όχι το Text property. Εχε υπόψη σου οτι η My θα σου δώσει το default instance της φόρμας και όχι το instance που τυχόν έχεις φτιάξει εσύ εκείνη τη στιγμή.

    Για να το δούμε λίγο καλύτερα, πες μας αν την τιμή προσπαθείς να την πάρεις μέσα από την ίδια τη φόρμα, από κάποια parent φόρμα (MDI) ή από κάποια φόρμα η οποία σήκωσε την Form1 (As New Form1).

    Σε περίπτωση που το χρησιμοποιείς μέσα από την ίδια την Form1, τότε αρκεί να ζητήσεις την τιμή του Me.DateTime1.Value. Βεβαια θα σου γυρίσει DateTime type, αλλα μετά μπορείς να το χειριστείς.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  12-01-2007, 15:16 23407 σε απάντηση της 23405

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Ακόμα καλύτερα είναι να ξεχάσεις τη χρήση του My.Forms. Μην το χρησιμοποιήσεις καθόλου! Ξήλωσέ το όπου το έχεις και ακολούθησε την κανονική υλοποίηση των φορμών (δήλωση, instance, κλπ). Το My.Forms είναι (imho) ένα τεράστιο βήμα προς τα πίσω και πολλές φορές οδηγεί ακριβώς σε τέτοια προβλήματα.
    Vir prudens non contra ventum mingit
  •  12-01-2007, 15:19 23408 σε απάντηση της 23403

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Μέσα από μία κεντρική MDI φόρμα ανοίγω την Form1 (As New Form1) όπου έχω τα DateTime controls τ’ οποία συμπληρώνει ο χρήστης και πατά το κουμπί GetOrders. Αυτό καλεί μία Function της κλάσης Orders όπου μέσα σε αυτήν είναι το SQL Select όπου θέλω να χρησιμοποιήσω τα values των DateTime controls. Χρησιμοποιώντας το MY.FORMS.FORM1.DateTime1 μου επιστρέφει null. H ερώτηση είναι αν μπορώ να πάρω κατευθείαν την τιμή των controls της φορμας.
  •  12-01-2007, 15:30 23409 σε απάντηση της 23408

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Οπως λέει και ο Μάνος, ξέχασε καλύτερα το My.Forms. Μπορείς να πάρεις την τιμή του datetime control (και, εξυπακούεται, και των υπολοίπων control της φόρμας) ως εξής:

    Αν έχεις κάνει π.χ. Dim objForm as New Form1 μετά μπορείς να ζητήσεις το objForm.DateTime1.Value και θα πάρεις πίσω μια datetime value.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  12-01-2007, 15:31 23410 σε απάντηση της 23409

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Ουπς, ισως να μην διάβασα προσεκτικά. Αν το κουμπί GetOrders είναι ΜΕΣΑ στη Form1, τότε αρκεί να ζητήσεις το Me.DateTime1.Value.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  12-01-2007, 15:38 23411 σε απάντηση της 23403

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Όχι μόνο μπορείς να περάσεις τις τιμές των ημερομηνιών στο DAL σου από τη φόρμα, αλλά επιβάλλεται. Η φόρμα πρέπει να εξαρτάται από το business και όχι το αντίστροφο. Άσχετα λοιπόν με το αν δουλεύει το My.Forms, κάνε τον κόπο να διορθώσεις το DAL και θα το βρεις μπροστά σου αργά ή γρήγορα.

    Νατάσα Μανουσοπούλου
  •  12-01-2007, 15:42 23412 σε απάντηση της 23410

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Σημερα έχω πάθει πτώση IQ. Μήπως αυτό που λέμε είναι οτι προσπαθείς αυτή τη στιγμή ΑΠΟ ΤΟ DAL να πάρεις την τιμή της φόρμας; (Ετσι κατάλαβα από τα λεγόμενα της Νατάσας). Αν ειναι ετσι, Τζιζ! Κακα! Μπουμ! Μην το κάνεις αυτό!

    Το my.forms δεν λειτουργεί γιατί επιστρέφει το DEFAULT instance της φόρμας και όχι αυτό που έχεις ορίσεις εσύ (as new form1). Συν τοις άλλοις, ζητάς το text και όχι το value property. Αλλά ακόμα και να ζητούσες το value property, θα ήταν άσκοπο μια και θα σου επέστρεφε κατά πάσα πιθανότητα το default value του control και όχι αυτό που θα είχε δώσει ο χρήστης.

    Συγνώμη για το μπέρδεμα στην απάντηση. Δεν είναι η μέρα μου σήμερα :)


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  12-01-2007, 16:44 23419 σε απάντηση της 23411

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

         Νατάσα μια και μίλησες για Business Layer στην συγκεκριμένη περίπτωση έχουμε το DALOrders το οποίο έχει το setup του Connection, του Command, το Dataadapter, το Dataset και κάνει το Fill επιστρέφοντας το φορτομένο Dataset. Η φόρμα κάνει το initialization της κλάσης και καλει την συνάρτηση OrderFill της κλάσης που της επιστρέφει το Dataset. To Business Layer που μπορει να παρεμβληθεί; Μήπως έχω βάλει κάτι παραπάνω στο DAL; Σε ρωτάω γιατί προσπαθώ να φύγω από τον παλιό τρόπο ανάπτυξης όπου όλα ήταν σε μία φόρμα χρησιμοποιώντας το IDE του VS2005 και να πάω στην ΟΟ ανάπτυξη με 3-tier. Τώρα αν κάτι λέω λάθος στην ορολογία, συγνώμη αλλά προσπαθώ να τα μάθω μόνος μου και είμε λίγο μπαιρδεμένος.

      Σ’ ευχαριστώ
  •  12-01-2007, 17:55 23425 σε απάντηση της 23419

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Έτσι όπως το περιγράφεις το DAL δεν είναι DAL. Το DAL δεν πρέπει να έχει ιδέα από το UI. Το UI θα πρέπει να περάσει τις τιμές που θέλει ως παραμέτρους στο DAL για αποθήκευση. Έτσι όπως το περιγράφεις όμως, το DAL πρέπει να ξέρει όλες τις λεπτομέρεις της κάθε φόρμας, και θα επηρεάζεται από κάθε αλλαγή που θα γίνει στη φόρμα.

    Όσον αφορά το business layer, εκεί μπαίνει ο κώδικας που λέει τί "κάνει" η εφαρμογή σου. Στην περίπτωση σου, ο κώδικας που θα δημιουργήσει ένα order αντικείμενο, θα ελέγξει το απόθεμα, θα επικοινωνήσει με όποιο service έχεις για πιστωτικές κλπ. Σκοπός είναι αυτός ο κώδικας, ο οποίος δεν αλλάζει άσχετα από το αν αλλάζει η βάση ή οι φόρμες, να μην επηρεάζεται από αλλαγές σε αυτές.

    Αν δεν θέλεις να βάλεις business layer, βάλε στο DAL σου μία μέθοδο SubmitOrder η οποία θα δέχεται ως παραμέτρους τα στοιχεία της παραγγελίας και θα τις αποθηκεύει. Κανονικά, δεν πρέπει κανένας πέρα από τη φόρμα να ξέρει ότι οι τιμές που στέλνεις στη βάση προέρχονται από το ένα ή το άλλο control.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  12-01-2007, 21:24 23430 σε απάντηση της 23425

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

             Παναγιώτη σ’ ευχαριστώ για την απάντηση. Μια και ξεκίνησα αυτή την συζήτηση θα ήθελα να παραθέσω λίγο κώδικα για να μου πείτε αν είμαι στο σωστό δρόμο ή όχι.
    Ξεκινάμε από την κλάση DALOrder η οποία είναι περίπου έτσι:
    Imports System.Data.OleDb
    Imports System.Data
    Public Class DALISPOrders
        Private ConnectionString As OleDbConnection
        Private DataadapterOrders As OleDbDataAdapter
        Private DatasetOrders As New DataSet
        Private SelectOrders As String
        Public Sub New()
            ConnectionString = New OleDbConnection
            ConnectionString.ConnectionString = My.Settings.ConnectionString
            Dim CommandSelectOrders As OleDbCommand
            SelectISPOrders = "SELECT * FROM Orders"
            CommandSelectOrders = New OleDbCommand(SelectOrders, ConnectionString)
            DataadapterOrders = New OleDbDataAdapter
            DataadapterOrders.SelectCommand = CommandSelectOrders
         End Sub
        Public Function GetOrders() As DataSet
            DataadapterOrders.Fill(DatasetOrders, "Orders")
            Return DatasetOrders
        End Function
    End Class


      Τώρα ερχόμαστε στη φόρμα (UI) όπου αφού ο χρήστης συμπληρώσει κάποια selection κριτήρια πατά το κουμπί GetOrder το οποίο έχει τον εξής κώδικα:
    Dim oGetOrders As DALOrders = New DALOrders
            DatasetOrders = oGetOrders.GetOrders
            Me.GridControlOrders.DataSource = DatasetOrders
            Me.GridControlOrders.DataMember = "Orders"


      Μέχρι εδώ τα λέω σωστά; Τώρα πως σκέφτομαι το Business Layer (BL). Στην φόρμα έχω 2 DateTime controls όπου ο χρήστης δίνει το χρονικό range του selection. Στην εφαρμογή θέλω ο χρήστης να δίνει το range μέσα στον ίδιο μήνα πχ 01-01-2007 έως 31-01-2007 και όχι 01-01-2007 έως 01-02-2007. Άρα θα φτιάξω μία κλάση έστω BLOrders.vb η οποία θα έχει:
    Public Function CheckMonth(ByVal DateFrom as Date, ByVal DateTo as Date) as Boolean
      If Difference then
        Return False
      Else
        Return True
      Endif
    End Function


      Έτσι ο κώδικας στην φόρμα θα γίνει ώς εξής:
    If CheckMonth(DateTimeFrom.Value, DateTimeTo.Value)=True Then
            DatasetOrders = oGetOrders.GetOrders
            Me.GridControlOrders.DataSource = DatasetOrders
            Me.GridControlOrders.DataMember = "Orders"
    Endif


      Τι λέτε τα κάνω σωστά; Αν έχετε κάτι το αντίθετο θα παρακαλούσα να υπάρχει και ένα μικρό παράδειγμα γιατί αυτό με βοηθάει πολύ. Αν πάλι κάποιος μπορεί να μου στείλει μια μικρή εφαρμογή με μία φόρμα επεξεργασίας των στοιχείων του πελάτη με 3-tier (DAL, BL, UI) θα του ήμουν υπόχρεος.
      Μια τελευταία ερώτηση: Βοηθούν κάποια προγράμματα όπως DEVFORCE, MYGENERATION κα ή καλύτερα να τα κάνεις μόνος σου;

      Ευχαριστώ

  •  13-01-2007, 17:39 23448 σε απάντηση της 23403

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Πιστεύω οτι είσε σε καλό δρόμο.
  •  14-01-2007, 17:25 23488 σε απάντηση της 23448

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Σχετικά με τον έλεγχο της ημ/νίας: Υπάρχουν δύο τρόποι να επιβάλλεις ένα constraint σε αυτό το σημείο. Ο ενας είναι, όπως σωστά προσπαθείς, μέσω του Business Layer.

    Ο άλλος είναι να τον κάνεις στο presentation layer και συγκεκριμένα επάνω στην ίδια τη φόρμα.

    Το που θα το υλοποιήσεις εξαρτάται από το τι θέλεις να επιτύχεις. Κατ' εμέ η πιό σωστή υλοποίησή του είναι αυτή που προσπάθησες, δηλαδή στο business logic. Γιατί, αν τυχόν δεν δοθεί σωστό range ημ/νιών, το business logic layer και όλα τα απο κάτω του layers είναι αυτά που θα πρέπει να αντιμετωπίσουν το πρόβλημα. Ετσι επιτυγχάνεις να αναθέσεις την υπευθυνότητα για τον έλεγχο ακριβώς στο κομμάτι εκείνο του λογισμικού που πρέπει να την έχει.

    Φιλοσοφικός ο προβληματισμός και η συζήτηση, μεν, αλλά πιστεύω να σου δίνει κάποιο hint για το πώς πρέπει να σκέφτεσαι (και ναι, βρίσκεσαι από ο,τι πιστεύω και εγώ στο σωστό δρόμο).


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  16-01-2007, 09:26 23596 σε απάντηση της 23488

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    Ευχαριστώ όλους για τις απαντήσεις σας. Θα ήθελα να σας κάνω μία τελευταία ερώτηση (για τώρα). Σε μιά 3-tier εφαρμογή όλα τα layers θα είναι στο ίδιο project; ή το κάθε layer σε ξεχωριστό κάτω από το ίδιο solution; Αν είναι σε ξεχωριστό τι τύπου θα είναι το project του DAL ή του BLL πχ Empty Windows Application;

    Ευχαριστώ
  •  16-01-2007, 10:01 23602 σε απάντηση της 23596

    Απ: Χρήση τιμής ενός control σε μία DAL κλάση

    H λογική οργάνωση (layers) της εφαρμογής δεν είναι απαραίτηο να συμβαδίζει με τη φυσική οργάνωση (projects). Μπορείς να βάλεις τα layers στο ίδιο project, μπορείς να τα βάλεις και σε ξεχωριστά. Αν τα βάλεις στο ίδιο θα έχεις τελικά ένα παραγόμενο αποτέλεσμα (το executable) ενώ αν τα βάλεις ξεχωριστά θα έχεις το executable και τα DLLs. Ένα βασικό, από τα διάφορα πλεονεκτήματα που έχει η χρήση DLLs, είναι ότι μπορείς να δίνεις ενημερώσεις της εφαρμογής τμηματικά, με νέες verions του ανάλογου DLL.
    Vir prudens non contra ventum mingit
Σελίδα 1 από 2 (16 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems