![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Здравствуйте...
есть класс
и класс
И еще один
В классе CPage можно только добавлять в сессию переменные, а читать их нужно из CParams. примерно так
Как спроектировать иерархию классов, кого с кем подружить..есть идеи конечно, но как говорится одна голова хорошо а две как понимаете лучше..а тут их побольше будет Думаю сделать класс CParams другом CSession чтобы он мог использовать map из CSession. Но тогда встает другой вопрос, откуда он получит указатель на CSession? Можно CParams -у при инициализации передать указатель на CPage но криво как то получается... Есть идеи? Добавлено @ 14:25 Или же пихать InitSession в CParams, это на первый взгляд самый легкий способ, но он логически туда не подходит.. Это сообщение отредактировал(а) azesmcar - 22.12.2005, 14:28 |
||||||||
|
|||||||||
| pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: 4 Всего: 6 |
Как вариант, могу предложить такой:
В класс CSession допиши метод который принимает как параметры CParams. В методе AddVariable передаёш параметп ниже в СSession. Только чёто непойму, какая то странная инициализация. Очень похожа на синглтон, но не то. -------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Это не кусок моего кода, только что написал, для примера...идея заключается в этом...
Передавать как аргумент CParams мне не очень нравится, это все должно автоматически происходить в классе CPage, кто-то другой наследует свой класс от CPage и он не должен иметь дело со всем этим. Ему подаются готовые параметры классом CParams на тарелочке. Это HTTP сессия, для CGI Добавлено @ 15:08 Только что прошло в мыслях что то вроде этого... Сделать CSession в CPage статической переменной, при создании CParams -а передать ему ссылку на CSession. class CPage;
В этом случае operator [] будет читать из m_pPage->m_pSession->m_SessionVariables а CParams -а сделать другом CSession. Но все равно не очень нравится, наверняка можно придумать что нибудь поэлегантнее.. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
А что мешает создать переменую типа CParams в классе CSession?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
То что CParams связан не только с сессией, он читает множество параметров из разных мест, и один из этих место сессия..опять таки логически не подходит..т.е. событие OnSomething получает не CParams а CSession в которой хранятся множество параметров в том числе и сессия... |
|||
|
||||
| Romikgy |
|
||||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
но он должен где то создаваться
где
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||||
|
|||||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
В функции main()
Добавлено @ 15:55
Ну например так Добавлено @ 15:57
|
||||||
|
|||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Я понимаю, что тебе не нравится - слишком много связей - все знают почти обо всех.
Может, можно убрать связь Session-Page? Т.е. пусть страница знает про параметры, а параметры - про сессию. Собственно, ты похоже так и сделал - в последнем пимере, да? А дружить никого ни с кем не надо, просто объяви typedef map<CString,CString> CVariables; в public-части класса Params (по-моему, самое логичное место), и сделай методы для чтения. -------------------- ... |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
'это отдельная ф-ция или чейто метод? ЗЫ если честно я чет основного вопроса не понял (уже) !!! -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Собственно вчера вечером я так и сделал, подружил сессию и параметры. После чего параметры читают данные напрямую из map<CString, CString> класса сессии.. Сессия обьявлены static. Она на всех одна. Используется примерно так..
в любое время можно вызвать.
Earnest Ну если никаких добавок по этому поводу нет тогда наверное так и оставлю.. |
||||||||
|
|||||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Тогда реализуй ее как синглетон. Ибо тогда выражение params.GetSession() как-то бессмысленно выглядит (вроде как у каждого экземпляра параметров может быть своя сессия). -------------------- ... |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Ну можно заменить GetSession() на что то вроде GetSessionPtr() А что такое синглетон..не встречал что-то такого...если не сложно пример приведи... |
|||
|
||||
| Earnest |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Да какая разница, я и не думала, что ты объект по значению возвращаешь. Плохо то, что функция эта как бы говорит: "вот вам моя сессия", а сессия эта вовсе не их (параметров), а общая. Понимаешь? Синглетон - это паттерн проектирования, одиночка то есть. По сути, все как у тебя, только более ясно выражено + принимаются меры, чтобы объект действительно был один. Я обычно пользуюсь следующей парой макросов, чтобы код ручками не писать: (Знаю-знаю, отцы макросы использовать не велят, но я привыкла, мне так кажется удобнее
Использование:
Далее, везде, где нам нужен объект-сессия, пишем:
Этот синглетон очень простой, умеет создаваться только без параметров, не является потокозащищенным, момент разрушения неуправляем и т.д. Если что-то не устраивает - дорабатываем. Возможные варианты обсуждаются, по-моему, у Майера, во 2м эффективном програмировании. -------------------- ... |
||||||||||
|
|||||||||||
| azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Не по значению возврашаю Я просто кое чего не понял..на кой черт все это нужно...ну макросами так макросами...я и сам правила дядюшки Страуструпа иногда нарушаю...только зачем все это?? Есть класс...
Знаю, опять не подходит...верно, пишем макрос
|
||||||||
|
|||||||||
| blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
Earnest,
обожаю изящные и удобные конструкции (решения). off: жаль, не могу репутацию добавить. не дорос ишо ;) Это сообщение отредактировал(а) blackofe - 23.12.2005, 19:17 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |