Форум: "Начинающим";
Текущий архив: 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.004 c