Jak na razie jesteś na najlepszej drodze do stworzenia potworka, takiego Frankensteina. :)
Haha dokładnie tak.
Właśnie w tych wszystkich ORM'ach (a znam się trochę na EF 4.0 i EntitySpaces) denerwuje mnie to, że trzeba uruchamiać odświeżenie wszystkich klas kiedy coś się w bazie danych zmieni i nie można o tym myśleć warstwowo czyli powiedzmy, że mamy:
SERWER BAZY DANYCH -------- ORM -> PROGRAM
w tej sytuacji po każdej zmianie bazy musimy odświeżać konkretne tabele w ORM'ie, żeby skorzystać poprzez niego z bazy danych. Dodatkowo wymaga to rekompilacji programu
A teraz taka sytuacja:
SEREWR BAZY DANYCH + PROGRAM POŚREDNI ----------- PROGRAM
PROGRAM POŚREDNI cały czas bada bazę danych i jeżeli jakaś zmiana nastąpi to się sam aktualizuję, a PROGRAM łączy się z PROGRAMEM POŚREDNIM i pobiera od niego to co chce. Wystarczy, że do bazy dodamy sobie procedurę coś zwracającą/modyfikującą to od razu będzie widoczna w PROGRAMIE i będzie można z niej skorzystać.
Przykładowy scenariusz: ja dodaje do bazy procedurę która mi zwraca kolumnę nazwa i cena z tabeli produkt, mój SuperRuntimeUniversOrmTerminator tworzy sobie obiekt, który zwróci procedura - w tym przypadku
class NazwaMetodyZBD_Obiekt
{
public string nazwa;
public string cena;
}
class MetodyZBD
{
//...
public List<NazwaMetodyZBD_Obiekt> nazwaMetody(/*parametry*/)
{
//wykonaj metody i zwróć wartośc
}
//...
}
A ja po stronie programu nic nie muszę robić, tylko odwołuję się do znanej mi metody i otrzymuję wynik w postaci przygotowanego obiektu :).
Nie wiem, czy ktoś mnie zrozumiał :).
W Javie spotkałem się z takim mechanizmem:
Class c = Class.forName(className);
Field []f = c.getDeclaredFields();
Method[] m = c.getMethods();
W C# było to strasznie toporne, ale tutorial z którego korzystałem był dla starej wersji C# więc myślałem, że ktoś zna jakieś ułatwienia.
Nic to - kupiłem sobie dobrą książkę wczoraj i zacząłem przeglądać tutoriale z refleksji w C#. Jak coś z tego wyjdzie to napiszę :).