Собственно вот:
Такие "интерфейсы" делать - НЕЛЬЗЯ.
Множество схожих методов с одинаковыми названиями.
Не говоря уж о том, что "одни через другие выводятся".
Я кстати долго думал - как "интерфейсы минимизировать". Через утилитные классы.
Если кому-то интересно - расскажу.
Если не интересно - "оставлю для себя".
Часть вещей были сделаны "в угоду оптимизации", но это всё равно - не является "оправданием".
Полный код тут - 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. Переделал я кстати этот "интерфейс".Получше. Скоро напишу - как.
Комментариев нет:
Отправить комментарий