Тема: Роздуми щодо клієнт-серверної взаємодії.
От слухайте. Раніше я був дурним і т.д. і робив так - клієнт посилає массив байт, в котрому спершу йде стрічка(команда), а потім дані, наприклад {"lgn","login",password}. А на сервері, є здоровий блок switch з мілліонами мілліонів case'ів, типу
switch(some_string)
{
....
case "lgn": TryToLogin(log,pass) break;
....
}
ну чи якось так. І зрозуміло, що, якщо перед цим case'ом буде ще 100, то буде 100 непотрібних перевірок. Ооот. Зара я використовую клас Dictionary<string key,MyDelegate del>, ну ви зрозуміли, тепер, коли на сервер приходять дані, я витягую команду з массиву байт і роблю щось типу
dict["lgn"](log,pass);
Ну ви зрозуміли. Коду набагато менше і швидше працює. Але є одне але. Методи, котрі мають виконуватися на сервері, можуть бути різної структури. Наприклад, ви тільки що побачили метод TryToLogin(string log, string pass), насправді він ще повертає значення типу int. І аби запихнути делегат цього методу в словник, треба створити відповідний делегат, в котрому описується, що він має повертати значення, та що він приймає два значення типу string. Але якщо ж методи можуть бути різними, то що, мені тепер створювати цілу купу відповідних делегатів????
В мене з`явилась ідея, зробити здоровий клас, котрий буде виконувати роль аргумента метода і назвати його щось типу ArgForServer, та створити метод-результат, котрий буде повертати якесь значення після обробки методом отриманих даних, якщо треба, і назвати його щось типу ResultFromServer. Ці два класа мають мати поля під всі значення, котрі можуть передаватись клієнтом серверу та навпаки, наприклад,
string login;
string password;
int id;
string message;
int addressee_id;
.....
ну типу такий собі універсальний аргумент на всі випадки життя. І дивіться, якщо я хочу відправити запит на логін, то я створюю екземпляр цього класу, і присвоюю потрібним полям потрібні значеня і тут в мене постає питання. Якщо я маю в класі, наприклад, чотири поля типу int, потім ініціалізую екземпляр цього класу, то в пам'яті буде виділено місце під всі чотири поля типу int?