Άρα η Foo1 δεν έχει ιδέα από βάση, ή γενικά από που έρχονται τα δεδομένα. Ξεκίνα χωρίζοντας τα "πάντα" της Foo1 σε namespaces, πχ, αν έχεις μεθόδους που κάνουν string handling, βάλε τις σε ένα namespace με όνομα Strings κ.ο.κ. Τα namespaces είναι ένα πρώτο βήμα για να δεις πως τελικά θα τα χωρήσεις.
Για την Foo2, ψάξε αν υπάρχει κώδικας που είναι ανεξάρτητος από τη δική σου βάση και μπορεί να χρησιμοποιηθεί σε οποιαδήποτε βάση. Όλες αυτές τις απολύτως generic ρουτίνες βάλε τις μόνες τους. Αν τα υπόλοιπα είναι αρκετά, χώρισέ τα ανάλογα με το είδος των δεδομένων που χειρίζονται. Εδώ δεν μπορώ να σου προτείνω κάτι, δεν ξέρω με τι είδους δεδομένα (το business meaning εννοώ) έχεις να κάνεις.
Μία πρακτική που ακολουθώ, είναι να χωρίζω αντίστοιχο κώδικα στα 3:
- Ένα project έχει μόνο τους τύπους των δεδομένων, πχ datasets ή business objects
- ένα project χειρίζεται το data access, δηλαδή διαβάζει δεδομένα από τη βάση και γεμίζει τα αντικείμενά μου, ή παίρνει δεδομένα από τα αντικείμενα και τα βάζει στη βάση
- το τρίτο project έχει business logic, δηλαδή παίρνει έτοιμα αντικείμενα, γεμάτα με δεδομένα και τα επεξεργάζεται. Αυτό το project δεν ξέρει τίποτα για τη βάση, τα δεδομένα έρχονται έτοιμα χωρίς να ξέρει από που προήλθαν.
Βέβαια ο χωρισμός εξαρτάται και από το είδος των αντικειμένων που χρησιμοποιείς. Αν χρησιμοποιείς πχ κάποιον O/R mapper που βάζει μέσα στα ίδια τα business objects των κώδικα για να γεμίζουν με data από τη βάση, τότε το 1 και το 2 είναι στην ουσία ένα project.
Δώσε μου περισσότερα στοιχεία αν θέλεις μήπως μου έρθει κάποια άλλη ιδέα...
Χρήστος Γεωργακόπουλος