Элегантная замена IF ... THEN
Есть большой список объектов, над каждым объектом пользователь может выполнять разные действия.
Объект А - может читать, удалять, редактировать
Объект Б - может читать, редактировать
Объект С - только просмотр.
и т.д. На форме есть кнопки, которые должны активироваться в зависимости от прав на данный объект.
// Класс объекта
TBuilding = class(TRootClass)
private
....
// Object Accesses
FCanRead: boolean;
FCanEdit: boolean;
FCanDelete: boolean;
function GetCanDelete: boolean;
function GetCanEdit: boolean;
function GetCanRead: boolean;
public
....
property CanRead: boolean read GetCanRead;
property CanEdit: boolean read GetCanEdit;
property CanDelete: boolean read GetCanDelete;
Собственно, вместо IF ... THEN приходит на ум реализация примерно следующего
...
procedure TObjectViewer.StringGrid1CellClick(const Column: TColumn;
const Row: Integer);
begin
// DoSomething
BEditObject.Enabled := Building.CanEdit;
BtnDeleteObject.Enabled := Building.CanDelete;
end;
...
В данном примере прав достаточно мало, однако есть другие сущности в которых их в 3 а то и 4 раза больше. Как вы бы подошли к решению данного вопроса?