![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| kuller |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Здравствуйте!!!
Вобщем вопрос вот в чем: в курсовой работе по ООП нам сказали использовать ИНДЕКСАТОР. Я немного погуглил, отовсюду немного почитал и вот сделал для себя примерный вывод:
Кто разбирается в этом, подскажите правильное ли применение и использование ИНДЕКСАТОРА??? |
|||
|
||||
| tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
два замечания:
- где проверка на IndexOutOfRange в самом индексаторе? И обработка ошибок? - зачем CreateIndeksator? Это ведь не такой уж паттерн )) Просто при вызове конструктора класса Indeksator инициализируйте внутренний массив. Ведь от момента вызова конструктора Indeksator до момента вызова метода CreateIndeksator ценность этого объекта равна -1 (пользы ноль, а память он уже покушал) ) да и использование не оптимально. Зачем столько лишних обращений к таблицам памяти?
насколько обращений меньше будет здесь?
-------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
| kuller |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
tol05, Спасибо за замечания!
я тут как бы на это не обращал внимания, тут судь в том, что я хотел понять правильно как бы я применил этот ИНДЕКСАТОР или нет.
Это, как я понял ЭФФЕКТИВНЕЙ сделать вот так:
Это сообщение отредактировал(а) kuller - 14.12.2009, 00:16 |
||||||
|
|||||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
я это и имел в виду. Отсутствие проверок на размерность - грубейшая ошибка. Даже в индексаторы ходить не надо. На массивах - уже неправильное использование. Я так понял, Вы как раз хотели мнение узнать? да тут как раз эффективность и ни при чем. Просто, анализируя функциональные возможности класса Indeksator видно, что его нужно или создавать сразу под конкретный массив или не создавать вообще. Поэтому создание Indeksator с неинициализированным массивом не имеет никакого смысла -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| kuller |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
tol05, Спасибо за объяснение!
Тут я просто вот подумал, что если сказано использовать в курсовой этот ИНДЕКСАТОР, то наверное я сделаю так: - как только начинает работать программа считаю количество записей в таблице - потом создаю индексатор - помещаю в него все записи - потом делаю по индексатору поиск, удаление, редактирование - а потом каким то образом, правда еще не предумал каким, изменения с этого индексатора переношу в БД |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
Да, можно. Только нужно избежать усложнения работы клиента (кода) с таким индексатором
Индексатор используется, чтобы упростить доступ к структурированным данным: структуру данных прячут в объект, а доступ к каким-либо конкретным данным осуществляют через индексатор. Прячьте в массив строки. Я бы сделал класс-индексатор с двумя открытыми методами взаимодействия с БД: ReadFromDB(...) и SaveToDB() - последний - без параметров Т.е. использовал бы "UnitOfWork", но только очень простой - кол-во элементов внутреннего массива задавать равным кол-ву строк, тогда если какой-то элемент массива окажется равным null - значит строка была удалена, иначе .... апдейтать все строки независимо от того, были ли они изменены или нет. В конце-концов, задача действительно не в том, чтобы отложенные изменения реализовывать... 1. вызов Read... 2. работа с данными через индексатор 3. вызов Save (строки null из БД удалить, остальные - проапдейтать). Добавлять просто так не получится. Сделать конечно можно, но это будет хлопотно для "просто примера индексатора" ) Это сообщение отредактировал(а) tol05 - 14.12.2009, 01:22 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| ДобренькийПапаша |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Есть вопросы. Никогда не встречал такого кода. Что он делает?
Да и хотел заметить, что мне не нравится ручная инициализация Id (может так положено при индексаторе, я просто не знаю):
Как-то убого это выглядит, мне кажется. Можно этого избежать? -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
||||
|
|||||
| kuller |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
tol05, ну да я так впринципе и думал
1. делаю SQL-запрос на получение количества записей в таблице БД 2. создаю индексатор такой размерности 3. SQL-запросом с БД считываю данные и заполняю индексатор ими 4. делаю по этому индексатору: поиск, удаление, изменение 5. обновляю БД по состоянию индексатора да а вот насчет добавления данных тут подумал наверное сильно ТРУДОЕМКО будет это реализовать с индексатором, плюс к томуже после каждого изменения записи или удаления её эти изменения придеться фиксировать в БД и опять же пересоздавать и перезаполнять этот индексатор?? так выходит??? |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
можно сделать проще, считывать все данные во внутреннюю DataTable (или DataSet) и через свой индексатор отбращаться к индексатору DataTable\DataSet.
Тогда и добавление новых строк будет возложено на DataTable\DataSet Думаю, что все проблемы можно решить так
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Может кто-нибудь удостоит вниманием мой пост выше?)))
угу, ну вот сделав List, один из поставленных мной вопросов решился))) Я вообще-то сразу хотел предложить сделать List, но подумал, вдруг Индексатор это что-то страшное, в чём я чего-то не понимаю))) Это сообщение отредактировал(а) ДобренькийПапаша - 14.12.2009, 13:59 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 3 Всего: 9 |
К индексатору имхо хорошо и стэк деяний присобачить, чтобы можно было отменять какие-то действия.
|
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Если стэк деяний собачить, то дело идёт к паттернам по полной программе, по-моему)))
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
ИМХО это не его задача )
индексатор делает удобным доступ к состоянию объекта. и не более А состоянием объекта должен управлять он сам. А еще лучше - клиент. Итак уже responsibilities у объекта больше чем нужно ) -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |