Форум: "Потрепаться";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
ВнизВзаимодействие классов Найти похожие ветки
← →
AlexHermit (2003-12-24 12:29) [0]Есть два класса A и B. Класс A имеет атрибут (назовем его BID), который может принимать значения ID из класса B. Каким образом наиболее красиво организовать проверку корректности ВID в конструкторе класса A при создании нового экземпляра этого класса? Т.е. по сути, необходимо организовать некий аналог Foreign Key из области БД.
Правильно ли будет передавать в конструктор класса A экземпляр B для осуществления такой проверки или же может быть есть более правильное решение?
← →
Skier (2003-12-24 12:38) [1]
> организовать проверку корректности ВID
Что подразумевается под словом "корректность" ?
← →
Sandman25 (2003-12-24 12:40) [2]Должен быть "общий" тип
type TMyType = ...
A = class...
BID: TMyType;
end;
B = class
ID: TMyType
end
← →
Digitman (2003-12-24 12:42) [3]
> Правильно ли будет
смотря в чем у тебя сомнения
потому что никаких строго определенных критериев "правильности" нет и быть не может
← →
Sandman25 (2003-12-24 12:45) [4]Попробуйте передавать в конструктор класса A экземпляр класса B.
← →
Anatoly Podgoretsky (2003-12-24 12:52) [5]Sandman25 © (24.12.03 12:45) [4]
Попробуйте передавать в конструктор класса A корректный экземпляр класса B.
← →
Sandman25 (2003-12-24 12:54) [6][5] Anatoly Podgoretsky © (24.12.03 12:52)
Точнее, нужный. Аналогично AOwner в большинстве Create. Заодно можно будет еще что-нибудь с этим экземплярам сделать.
← →
Anatoly Podgoretsky (2003-12-24 12:56) [7]А раз аналог Foreign Key то надо обслуживать еще и уничножение экземпляра. Метод Notification и рядом.
← →
AlexHermit (2003-12-24 12:58) [8]To Sandman25
>type TMyType = ...
>A = class...
> BID: TMyType;
>end;
>B = class
> ID: TMyType
>end
Эта схема выглядит примерно вот так:
A = class...
...
BID: Integer; - значения должны быть только те, которые есть у B.ID
...
end;
B = class
ID: Integer;
AttributeA
AttributeB
.....
end
Skier
>Что подразумевается под словом "корректность" ?
Аттрибут BID класса A должен содержать только те значения, которые содержаться в ID класса B
Digitman
>потому что никаких строго определенных критериев "правильности" нет и быть не может
Речь шла о наиболее точном решении в соответствии с "правилами хорошего тона" в ООП.
← →
Digitman (2003-12-24 13:04) [9]
> AlexHermit
тогда думаю, что передача объекта-справочника параметром конструктора объекта-документа - не самое плохое решение
особенно, если классы справочника и документа реализованы в разных модулях
← →
Sandman25 (2003-12-24 13:04) [10][8] AlexHermit © (24.12.03 12:58)
Кстати, рассмотрите вариант сохранения ссылки на B вместо номера ID. Чтобы потом легче было находить соответствующий B.
← →
AlexHermit (2003-12-24 13:26) [11]>Кстати, рассмотрите вариант сохранения ссылки на B вместо номера ID. Чтобы потом легче было находить соответствующий B.
Да, это не плохой вариант. Спасибо.
← →
Юрий Зотов (2003-12-24 13:49) [12]> AlexHermit © (24.12.03 12:29)
> Каким образом наиболее красиво организовать проверку
> корректности ВID в конструкторе класса A при создании нового
> экземпляра этого класса?
Нет проблем. Например:
type
TID = type integer;
TClassB = class;
TClassA = class(...)
...
procedure CheckID(B: TClassB);
constructor Create(B: TClassB);
end;
TClassB = class(...)
...
property ID: TID...;
end;
procedure TClassA.CheckID(B: TClassB);
begin
if < B.ID имеет некорректное значение> then
raise Exception.Create("Некорректный ID")
end;
constructor TClassA.Create(B: TClassB);
begin
inherited Create(...);
...
CheckID(B);
...
end;
Как видите, все очень просто. Но вот условие в CheckID:
< B.ID имеет некорректное значение>
Вы должны написать сами. Потому что только Вы один знаете, что такое "корректный" или "некорректный" ID.
> Правильно ли будет передавать в конструктор класса A экземпляр
> B для осуществления такой проверки
Правильно (именно так и сделано выше). А можно передавать в конструктор не весь B, а только его ID - и это тоже будет правильно. А можно передавать и еще что угодно - и это тоже будет правильно.
Главное в том, что конструктор A должен получить ВСЕ данные, необходимые для проверки корректности ID, а потом передать эти данные в CheckID. Значит, какие именно данные надо передавать в конструктор ЦЕЛИКОМ И ПОЛНОСТЬЮ определяется тем, что Вы понимаете под "корректностью" ID.
← →
DiamondShark (2003-12-24 16:08) [13]А зачем там вообще ID?
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.016 c