|
|
|
создание классов
|
|||
|---|---|---|---|
|
#18+
столкнулся с проблемой: есть Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. и теперь в раздумиях: DataSet * %база% делать членом класса или оставить его на стороне клиента? модификация бд, как видно, оставлена на класс DataBase. однако отображением данных в DataGrid * %табл% занимается клиент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 13:14 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
Очень соблазнительно закинуть датасет клиенту, но мое ИМХО нужно оставить на "серваке"-базе. Таким образом меняя базу ты сразу будешь менять и набор датасетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 14:39 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
просто если оставить DataSet * %база% на сервере, то придется либо давать доступ на чтение DataSet * %база% для обновления DataGrid * на стороне клиента, либо писать ф-цию обновления в рамках класса DataBase. но 2ой вариант не катит: DataBase занимается только модификацией и предоставлением данных бд; их конечное использование его не касается. 1ый вариант вынуждает иметь 2 копии DataSet'а: в экземпляре класса и у клиента. при public DataBase::DataSet'е он открыт для записи. гмм. вот. может, я просто слишком параноид? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 15:35 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
я думаю здесь проще применить паттерн "декоратор". Когда "на базе" у тебя есть закрытый класс датасет, а у клиента есть декоратор датасета, который является к нему другом и инициализируется от указателя на датасет. Он просто будет отвечать за то множество интерфейсных функций которые необходимы для грида. вот и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 15:41 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
у клиента есть декоратор датасета ты имеешь ввиду: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 16:13 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
ну наверное да если на самом деле это выглядит так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. как-то так... у клиента Код: plaintext 1. 2. 3. канеш все это надо поправить с учетом управляемого С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 16:36 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
декотратор можно объявить во вне, но тогда надо будет ставить friend. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 16:37 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
dwl Код: plaintext вот, что мне было надо, точно! спасибо. реально, возвращая константный DataSet *, ты решаешь проблему и лишней копии, и неизменности оригинального DataSet'а =) спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 16:48 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
забыл написать главное! сам декторатор дублирует часть интерфейса декорируемого объекта. такой паттерн применяется, когда ты хочешь клиенту библиотеки предоставть только часть API, или сделать эту API управляемую правами. Еще он испоьлзуется для абстрагирования от конструктора, чтобы сделать их например полиморфиными, как например в фабрике. ну не суть пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. мысль номер два из области безопасности иерархии классов, т.к. струтура датасетов подчинена струтуре базы, то лучше в случае разрушения объекта базы уничтожать и все датасеты. Для этого вместо вызова оператора new в методе get_dataset надо добавить добавление dataset в список. Естессно писать декторатор тогда надо будет на основе либо итератора, либо ссылки. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. тогда при разваел базы вызовется деструктор массива датасетов и они сделают недействительными декотраторов у клиента. Потому что вызовутся деструкторы все датасетов базы. Возможно вам это и не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 17:01 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
DataSet представляет всю бд и создается один для каждого экземпляра. реально, он просто хранит в памяти то, что содержится в файлах бд: DataSet ~ DataTableCollection. imho, для больших бд это сумашествие. но в бд предполагается кол-во записей <5000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 17:52 |
|
||
|
создание классов
|
|||
|---|---|---|---|
|
#18+
ну нет так нет. PS: забыл угловые скобки, заработался вчера. Плюс не стоит использовать в этом случае вектор и дэк, потому что у них итераторы могут становится недействительными. Поэтому только list, а значит фокус с добавлением в конец и чтением реверс-итератора не имеет смысла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2004, 11:27 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32844080&tid=2033933]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 377ms |

| 0 / 0 |
