| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Индексаторы |
| Автор: kuller 13.12.2009, 22:44 | ||
| Здравствуйте!!! Вобщем вопрос вот в чем: в курсовой работе по ООП нам сказали использовать ИНДЕКСАТОР. Я немного погуглил, отовсюду немного почитал и вот сделал для себя примерный вывод:
Кто разбирается в этом, подскажите правильное ли применение и использование ИНДЕКСАТОРА??? |
| Автор: tol05 13.12.2009, 22:56 | ||||
| два замечания: - где проверка на IndexOutOfRange в самом индексаторе? И обработка ошибок? - зачем CreateIndeksator? Это ведь не такой уж паттерн )) Просто при вызове конструктора класса Indeksator инициализируйте внутренний массив. Ведь от момента вызова конструктора Indeksator до момента вызова метода CreateIndeksator ценность этого объекта равна -1 (пользы ноль, а память он уже покушал) ) да и использование не оптимально. Зачем столько лишних обращений к таблицам памяти?
насколько обращений меньше будет здесь?
|
| Автор: kuller 14.12.2009, 00:10 | ||||||
tol05, Спасибо за замечания!
я тут как бы на это не обращал внимания, тут судь в том, что я хотел понять правильно как бы я применил этот ИНДЕКСАТОР или нет.
Это, как я понял ЭФФЕКТИВНЕЙ сделать вот так:
|
| Автор: kuller 14.12.2009, 00:57 |
| tol05, Спасибо за объяснение! Тут я просто вот подумал, что если сказано использовать в курсовой этот ИНДЕКСАТОР, то наверное я сделаю так: - как только начинает работать программа считаю количество записей в таблице - потом создаю индексатор - помещаю в него все записи - потом делаю по индексатору поиск, удаление, редактирование - а потом каким то образом, правда еще не предумал каким, изменения с этого индексатора переношу в БД |
| Автор: tol05 14.12.2009, 01:20 |
| Да, можно. Только нужно избежать усложнения работы клиента (кода) с таким индексатором Индексатор используется, чтобы упростить доступ к структурированным данным: структуру данных прячут в объект, а доступ к каким-либо конкретным данным осуществляют через индексатор. Прячьте в массив строки. Я бы сделал класс-индексатор с двумя открытыми методами взаимодействия с БД: ReadFromDB(...) и SaveToDB() - последний - без параметров Т.е. использовал бы "UnitOfWork", но только очень простой - кол-во элементов внутреннего массива задавать равным кол-ву строк, тогда если какой-то элемент массива окажется равным null - значит строка была удалена, иначе .... апдейтать все строки независимо от того, были ли они изменены или нет. В конце-концов, задача действительно не в том, чтобы отложенные изменения реализовывать... 1. вызов Read... 2. работа с данными через индексатор 3. вызов Save (строки null из БД удалить, остальные - проапдейтать). Добавлять просто так не получится. Сделать конечно можно, но это будет хлопотно для "просто примера индексатора" ) |
| Автор: ДобренькийПапаша 14.12.2009, 09:37 | ||||
Есть вопросы. Никогда не встречал такого кода. Что он делает?
Да и хотел заметить, что мне не нравится ручная инициализация Id (может так положено при индексаторе, я просто не знаю):
Как-то убого это выглядит, мне кажется. Можно этого избежать? |
| Автор: kuller 14.12.2009, 11:36 | ||
tol05, ну да я так впринципе и думал
1. делаю SQL-запрос на получение количества записей в таблице БД 2. создаю индексатор такой размерности 3. SQL-запросом с БД считываю данные и заполняю индексатор ими 4. делаю по этому индексатору: поиск, удаление, изменение 5. обновляю БД по состоянию индексатора да а вот насчет добавления данных тут подумал наверное сильно ТРУДОЕМКО будет это реализовать с индексатором, плюс к томуже после каждого изменения записи или удаления её эти изменения придеться фиксировать в БД и опять же пересоздавать и перезаполнять этот индексатор?? так выходит??? |
| Автор: tol05 14.12.2009, 13:38 | ||
| можно сделать проще, считывать все данные во внутреннюю DataTable (или DataSet) и через свой индексатор отбращаться к индексатору DataTable\DataSet. Тогда и добавление новых строк будет возложено на DataTable\DataSet Думаю, что все проблемы можно решить так
|
| Автор: ДобренькийПапаша 14.12.2009, 13:57 |
| Может кто-нибудь удостоит вниманием мой пост выше?))) угу, ну вот сделав List, один из поставленных мной вопросов решился))) Я вообще-то сразу хотел предложить сделать List, но подумал, вдруг Индексатор это что-то страшное, в чём я чего-то не понимаю))) |
| Автор: Heinzz 14.12.2009, 16:41 |
| К индексатору имхо хорошо и стэк деяний присобачить, чтобы можно было отменять какие-то действия. |
| Автор: ДобренькийПапаша 14.12.2009, 16:42 |
| Если стэк деяний собачить, то дело идёт к паттернам по полной программе, по-моему))) |
| Автор: tol05 14.12.2009, 16:49 |
| ИМХО это не его задача ) индексатор делает удобным доступ к состоянию объекта. и не более А состоянием объекта должен управлять он сам. А еще лучше - клиент. Итак уже responsibilities у объекта больше чем нужно ) |