Собственно вот:
Такие "интерфейсы" делать - НЕЛЬЗЯ.
Множество схожих методов с одинаковыми названиями.
Не говоря уж о том, что "одни через другие выводятся".
Я кстати долго думал - как "интерфейсы минимизировать". Через утилитные классы.
Если кому-то интересно - расскажу.
Если не интересно - "оставлю для себя".
Часть вещей были сделаны "в угоду оптимизации", но это всё равно - не является "оправданием".
Полный код тут - https://sourceforge.net/p/rumtmarc/code-0/HEAD/tree/trunk/Blogger/RealWork/m3/m3StorageInterfaces.pas
P.S. Переделал я кстати этот "интерфейс".Получше. Скоро напишу - как.
Im3IndexedStorage = interface(IStorage)
{* Хранилище с возможностью доступа по индексу. }
['{1962E532-4615-4D4A-9FAC-0F1E3402F097}']
function SetIndexParam(aBits: byte;
aMaxBits: byte): Boolean;
{* устанавливает параметры "размазывания" индекса. }
function DeleteStore(anIndex: Integer): hResult;
{* удаляет элемент хранилища. }
function CreateStore(anIndex: Integer;
anAccess: Tm3StoreAccess;
aStoreType: Tm3StoreType;
out aStore: IUnknown;
aUseCompression: Boolean = true): hResult; overload;
{* создает элемент хранилища. }
function OpenStore(anIndex: Integer;
anAccess: Tm3StoreAccess;
aStoreType: Tm3StoreType;
out aStore: IUnknown;
aUseCompression: Boolean = true): hResult; overload;
{* открывает элемент хранилища. }
function CreateStore(const aName: Tl3PCharLen;
anAccess: Tm3StoreAccess;
aStoreType: Tm3StoreType;
out aStore: IUnknown;
aUseCompression: Boolean = true): hResult; overload;
{* создает элемент хранилища }
function OpenStore(const aName: Tl3PCharLen;
anAccess: Tm3StoreAccess;
aStoreType: Tm3StoreType;
out aStore: IUnknown;
aUseCompression: Boolean = true): hResult; overload;
{* открывает элемент хранилища }
function OpenStore(aPosition: Int64;
anAccess: Tm3StoreAccess;
const aName: Tl3PCharLen;
aStoreType: Tm3StoreType;
aUseCompression: Boolean = true): IUnknown; overload;
{* открывает элемент хранилища. }
function OpenStore(aPosition: Int64;
anAccess: Tm3StoreAccess;
anIndex: Integer;
aStoreType: Tm3StoreType;
aUseCompression: Boolean = true): IUnknown; overload;
{* открывает элемент хранилища }
function OpenStore(const aStoreInfo: Tm3StoreInfo;
const aName: Tl3PCharLen;
anAccess: Tm3StoreAccess = m3_saRead;
aUseCompression: Boolean = true): IUnknown; overload;
{* открывает элемент хранилища. }
procedure Iterate(anAction: Tm3StorageElementAction); overload;
{* перебирает элементы хранилища по именам. }
procedure Iterate(anAction: Tm3StoreAction); overload;
{* перебирает элементы хранилища по индексам. }
procedure IterateF(anAction: Tm3StorageElementAction); overload;
{* перебирает элементы хранилища, потом освобождает заглушку. }
procedure IterateF(anAction: Tm3StoreAction); overload;
{* перебирает элементы хранилища, потом освобождает заглушку. }
function RenameElementA(const aOldName: Tl3WString;
const aNewName: Tl3WString): hResult;
{* Переименовывает элемент хранилища }
function ElementExists(const aName: Tl3WString): Boolean;
{* Проверяет существование элемента с указанным именем }
end;//Im3IndexedStorage
Такие "интерфейсы" делать - НЕЛЬЗЯ.
Множество схожих методов с одинаковыми названиями.
Не говоря уж о том, что "одни через другие выводятся".
Я кстати долго думал - как "интерфейсы минимизировать". Через утилитные классы.
Если кому-то интересно - расскажу.
Если не интересно - "оставлю для себя".
Часть вещей были сделаны "в угоду оптимизации", но это всё равно - не является "оправданием".
Полный код тут - https://sourceforge.net/p/rumtmarc/code-0/HEAD/tree/trunk/Blogger/RealWork/m3/m3StorageInterfaces.pas
P.S. Переделал я кстати этот "интерфейс".Получше. Скоро напишу - как.
Комментариев нет:
Отправить комментарий