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

 

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

Λοιπον χρειαζομαι μια ιδέα

Îåêßíçóå áðü ôï ìÝëïò masteripper. Τελευταία δημοσίευση από το μέλος masteripper στις 11-01-2010, 07:42. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-01-2010, 21:09 56295

    Λοιπον χρειαζομαι μια ιδέα

    Γεια χαρα σε όλους και καλή χρονια.

    Όπως λέει και ο τιτλος χρειάζομαι μια ιδέα.

    Έχω αρκετές μικρές και μεγάλες εφαρμογές που σιγά -σιγά χρειάζονται να περάσουν στο επόμενο στάδιο.

    Το πρόβλημα είναι οτι οι εφαρμογές αφορουν προιοντα με ιδιατερα μεγαλη παραμετροποίηση..δηλ το τάδε προιον θα πάρει αυτή την τιμή1 αν ισχύει η χ και η ψ συνθήκη αλλά όχι όταν ισχύει η ζ οπότε παιρνει την τιμη2 αλλά εαν είναι το συγκεκριμένο μοντέλλο θα πρεπει να υπάρχει επιβάρυνση 10% και πάει λέγοντας....μιλάμε για πολλά IF,Case ,λογικά And,Or ....ελπίζω να γίνεται αντιληπτό .

    Ειναι φυσικό οτι γινεται ενας ψιλο χαμός απο περιπτώσεις-υποπεριπτώσεις και υποπεριπτωσεις υποπεριπτωσεων.Θα ήθελα να το αλλάξω αυτο ...σκεφτόμουν κάτι σε πίνακα όπου με κλειδί τον κωδικο του προιοντος να υπάρχουν εγγραφες για την κάθε περιπτωση οποτε να μπορουν να "απεικονιστουν" και να διορθωθουν/προστεθουν αναλόγως.Αλλα δυστυχως τιποτα δεν είναι στανταρωτ,άλλοτε ισχύει π.χ "if  x1 >100 and x2 ="L" and x3 > 3 or x4 <2 and x5 ="Sx1"  'Η  "x1 =100 or x2 ="D" or x3=1

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

  •  09-01-2010, 21:36 56296 σε απάντηση της 56295

    Απ: Λοιπον χρειαζομαι μια ιδέα

    Μου ακούγεται σαν μια ευκαιρία για υλοποίηση μηχανισμού rules. 

    Αν μπορείς να ξεχωρίσεις επιτυχώς τα είδη των συνθηκών (π.χ. μια συνθήκη είναι ο έλεγχος τιμής σε ένα αριθμητικό πεδίο, μια άλλη συνθήκη είναι η διαπίστωση του τύπου του προϊόντος και πάει λέγοντας) καθώς και τις ενέργειες που κάνεις όταν ένα σετ συνθηκών ισχύει (π.χ. αυξάνω την έκπτωση), τότε έχεις μπροστά σου ένα σετ από συνθήκες και ένα σετ από ενέργειες. Αυτό που χρειάζεται να κάνεις είναι να υλοποιήσεις ένα μηχανισμό που θα "χτενίζει" το εκάστοτε transaction σου, και θα βρίσκει αν οι τιμές συμφωνούν με κάποιο rule, ωστε να πραγματοποιεί την αντίστοιχη ενέργεια. Φυσικά, θα πρέπει να υλοποιηθεί και ένα σετ τελεστών με τους οποίους θα "ενώνεις" τις συνθήκες μεταξύ τους. 

    Αυτό που είχε υλοποιηθεί παλιότερα σε μια εφαρμογή που δούλευα, ήταν ένα tree συνθηκών οπου τα nodes μεταξύ τους συνδέονταν όχι απλά με parent/child relationship, αλλα και τελεστές and/or. Ετσι δημιουργούσαμε ένα ιεραρχικό σετ κανόνων οπου τα "παιδιά" ήταν subsets που έπρεπε να ισχύουν, και το όλο node από την κορυφή του μεταφραζόταν σε κάτι σαν "if x=100 and x2>200 or x3=5" κλπ.

    Δεν γράφω περισσότερα, γιατί επιχειρώ απλά να δώσω το γενικότερο στίγμα. Κατά την άποψή μου αυτή είναι η κατεύθυνση που θα έπρεπε να κινηθείς και μάλιστα προς ένα generic και reusable τρόπο. Κάνε τον κόπο να ρίξεις μια ματιά και εδώ: http://msdn.microsoft.com/en-us/library/aa480193.aspx (αν και δεν έχω δει καθόλου Workflow Foundation, νομίζω οτι είναι πολύ κοντά σε αυτό που θέλεις να κάνεις).



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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  10-01-2010, 13:33 56308 σε απάντηση της 56296

    Απ: Λοιπον χρειαζομαι μια ιδέα

    cap:

    Αυτό που είχε υλοποιηθεί παλιότερα σε μια εφαρμογή που δούλευα, ήταν ένα tree συνθηκών οπου τα nodes μεταξύ τους συνδέονταν όχι απλά με parent/child relationship, αλλα και τελεστές and/or. Ετσι δημιουργούσαμε ένα ιεραρχικό σετ κανόνων οπου τα "παιδιά" ήταν subsets που έπρεπε να ισχύουν, και το όλο node από την κορυφή του μεταφραζόταν σε κάτι σαν "if x=100 and x2>200 or x3=5" κλπ.
     

    Μήπως θα μπορούσες να δώσεις 1 παραδειγματάκι λίγο οσον αφορά την δομή του πίνακα και ίσως μερικές εγγραφές. για να δω πως παει

  •  10-01-2010, 13:40 56309 σε απάντηση της 56308

    Απ: Λοιπον χρειαζομαι μια ιδέα

    Δυστυχώς ήταν ένα πολύ complex πράγμα (αρκετοί πίνακες + πολύς κώδικας), το οποίο δεν το έχω πλέον. Μην σκέφτεσαι πάντως κάτι απλό - αυτές οι λύσεις είναι ένα μεγάλο project από μόνες τους.


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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  11-01-2010, 05:02 56332 σε απάντηση της 56309

    Απ: Λοιπον χρειαζομαι μια ιδέα

    Απο τα λεγομενα σου καταλαβαινω οτι εχεις να κανεις με μια εφαρμογη η οποια πρεπει να "αλλαζει" το τροπο λειτουργιας ανα τακτο χρονικο διαστημα.
    Για να μην κανεις rebuιld καθε μηνα για να βαλεις μια καινουρια συναρτηση, καλυτερα παιξεις με reflection. Τι θελω να πω, θα σου παραθεσω 
    ενα απλουστατο κομματι κωδικα στο οποιο γινετε επεξεργασια ενος αντικειμενου (το οποιο μπορει να ειναι αγνωστο) απο ενα αλλο αγνωστο αντικειμενο,
    χωρις να επεμβουμε στο κωδικα της εφαρμογης (κατι σα addon για κωδικα)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.IO;
    namespace ConsoleApplication2
    {
        class Program
        {
            class myObject { public int someValue { get; set; } public Iexp expre { get; set; } }
            static void Main(string[] args)
            {
                //.... create a new expression
                CreateExpre(new exp1());
                //....
                //some object type using a new expression
                myObject myobj = new myObject { someValue = 123, expre = LoadExp1() };
                //...

                //work 
                myobj.expre.exp(myobj);
                //.. :P
                Console.WriteLine(myobj.someValue);
                Console.Read();
                
            }
            static void CreateExpre(object expre)
            {
                BinaryFormatter forma = new BinaryFormatter();
                using (var file = File.Create(@"c:\exp1.BLOCKED EXPRESSION)
                {
                    forma.Serialize(file, expre);
                }
            }
            static Iexp LoadExp1()
            {
                BinaryFormatter forma = new BinaryFormatter();
                object obj = null;
                using (var file = File.Open(@"c:\exp1.expression", FileMode.Open))
                {
                    obj = forma.Deserialize(file);
                }
                return obj as Iexp;
            }
           
        }
       
        interface Iexp
        {
            void exp(object obj);
        }
        [Serializable]
        class exp1 : Iexp
        {

            #region Iexp Members

            void Iexp.exp(object obj)
            {
                var unknow = obj.GetType();
                var property = unknow.GetProperty("someValue");
                int? someValue = (int?)property.GetValue(obj, null);
                if (someValue == null)
                    throw new Exception("reflect error");

                if (someValue.Value > 100)
                {
                    property.SetValue(obj, someValue * 2, null);
                }
         }

            #endregion
        }
    }
    Αλλο που μου ερχετε ειναι να φτιαξεις μια μηχανη Script (power by regula expression :P )
  •  11-01-2010, 07:42 56333 σε απάντηση της 56332

    Απ: Λοιπον χρειαζομαι μια ιδέα

    Αυτο με το reflection να πω την αλήθεια δεν το ξέρω αλλά απ'τι έψαξα λίγο χθες το βράδυ αυτο που χρειάζομαι είναι μια rule engine για .ΝΕΤ η οποία θα μου επιτρέψει να αποθηκεύσω τους κανόνες έξω απο τον κώδικα και να μπορουν να παραμετροποιούνται εύκολα χωρίς rebuild.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems