Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.03.18;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
2-1322726859
Faceless
2011-12-01 12:07
2012.03.18
TBucketList


4-1255090574
DVM
2009-10-09 16:16
2012.03.18
Подскажите функцию Windows 7 и Windows 2008 Server


2-1322678545
Alexey
2011-11-30 22:42
2012.03.18
Двойной клик по заголовку формы


2-1322683472
Никита1990
2011-12-01 00:04
2012.03.18
Как определить дату БИОС?


2-1323067819
мамон
2011-12-05 10:50
2012.03.18
Как программно нажать на кнопки в WebBrowser"