Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];

Вниз

подход к разработке функционала для работы с бд   Найти похожие ветки 

 
LDV   (2011-12-05 21:24) [0]

Есть БД интернет-магазина (встроенная - DBISAM), которая включает в себя таблицы: товары (products), разделы (categories). Нужно реализовать функционал (будет храниться в DLL) для работы с БД (далее он будет использоваться в клиентском приложении):

Товары:

- добавление товара в указанный раздел
- удаление товара
- поиск товара по нескольким значениям полей
- поиск товара по идентификатору
- установка значения поля товара (например, поле "price");
- чтение значения поля товара
- перемещение к первому не помеченному на удаление товару
- перемещение к следующему не помеченному на удаление товару
- перемещение к предыдущему не помеченному на удаление товару
- перемещение к последнему не помеченному на удаление товару
- назначение товару сопутствующих товаров

Разделы:

- добавление раздела
- удаление раздела
- поиск раздела по нескольким значениям полей
- поиск раздела по идентификатору
- установка значения поля раздела (например, поле "price");
- чтение значения поля раздела
- перемещение к первому не помеченному на удаление раздела
- перемещение к следующему не помеченному на удаление раздела
- перемещение к предыдущему не помеченному на удаление раздела
- перемещение к последнему не помеченному на удаление раздела
- перемещение раздела в другой раздел

Посоветуйте, как красиво и грамотно организовать структуру. Думаю сделать 2 класса TProducts и TCategories, каждый из которых будет работать с соответствующей таблицей БД. Имеет ли смысл так делать, если по сути методы классов будут являтся оберткой над методами TDBISAMTable"ов?

что-то типа такого:

 TProducts = class(TObject)
 private
   // ...
   FDatabaseName: string;
   FSessionName: string;
   FProducts_Table: TDBISAMTable;
   // ...
 public
   // ...

   constructor Create(const DatabaseName, SessionName: string);    

   // добавление нового товара в указанный раздел, установка курсора
   procedure Add(CategoryId: Integer);

   // удаление товара на котором установлен курсор
   procedure Remove;

   // поиск товара по идентификатору, установка курсора
   function Find(Id: Integer): Boolean;

   // Переход к первому не отмеченному на удаление товару,
     // установка курсора
   function GoToFirst: Boolean;

   // Переход к следующему не отмеченному на удаление товару,
     // установка курсора
   function GoToNext: Boolean;

   // Переход к предыдущему не отмеченному на удаление товару,
     // установка курсора
   function GoToPrevious: Boolean;

   // Переход к последнему не отмеченному на удаление товару,
     // установка курсора
   function GoToLast: Boolean;

   // ...

 end;

{ TProducts }

procedure TProducts.Add(CategoryId: Integer);
begin
 // ...
 // несколько проверок
 // ...
 FProducts_Table.Append;
 try
   FProducts_Table.FieldByName(CategoryIdFieldName).AsInteger :=
     CategoryId;
   FProducts_Table.Post;
 except
   FProducts_Table.Cancel;
   raise;
 end;
end;

function TProducts.Find(Id: Integer): Boolean;
begin
 // ...
 // несколько проверок
 // ...
 Result := FProducts_Table.FindKey([Id]);
end;

function TProducts.GoToFirst: Boolean;
begin
 // ...
 // несколько проверок
 // ...
 Result := FProducts_Table.FindFirst;
end;

function TProducts.GoToLast: Boolean;
begin
 // ...
 // несколько проверок
 // ...
 Result := FProducts_Table.FindLast;
end;

function TProducts.GoToNext: Boolean;
begin
 // ...
 // несколько проверок
 // ...
 Result := FProducts_Table.FindNext;
end;

function TProducts.GoToPrevious: Boolean;
begin
 // ...
 // несколько проверок
 // ...
 Result := FProducts_Table.FindPrevious;
end;

procedure TProducts.Remove;
begin
 // ...
 // несколько проверок
 // ...
 FProducts_Table.Delete;
  // ...
 // некоторые действия
 // ...
end;



 
Ega23 ©   (2011-12-05 21:29) [1]


> Думаю сделать 2 класса TProducts и TCategories,


Сначала подумай, как будешь гонять данные между клиентским приложением и твоей dll


 
LDV   (2011-12-05 21:46) [2]


> как будешь гонять данные между клиентским приложением и
> твоей dll


это уже продумано и реализовано другим человеком, соединение с бд, получение / отправка данных таблиц работает прекрасно, осталось только функционал написать. сейчас вопрос нужно ли разбивать функционал в отдельные сущности.


 
Юрий_   (2011-12-05 21:55) [3]


> Имеет ли смысл так делать, если по сути методы классов будут
> являтся оберткой над методами TDBISAMTable"ов?


Классы делать смысл имеет, но проектировать их лучше не так.
А так, чтобы они были отвязаны от таблиц и БД.
То есть отдельно объекты бизнес -логики, отдельно код по работе с БД.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
15-1322338591
SQLEX
2011-11-27 00:16
2012.03.18
Как фильм называется про разведку


15-1322191574
P
2011-11-25 07:26
2012.03.18
Цифровая подпись драйвера


15-1322080202
Юрий
2011-11-24 00:30
2012.03.18
С днем рождения ! 24 ноября 2011 четверг


8-1219590082
Agent[007]
2008-08-24 19:01
2012.03.18
Direct3D


1-1288683989
pooh
2010-11-02 10:46
2012.03.18
аналог текстового редактора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский