![]() |
#18 |
Участник
|
Цитата:
Цитата:
Во-первых, это пример не передачи "функции", а вызова совершенно конретной для разных классов. Во-вторых, продолжаю настаивать, что вместо "передачи функции" более правильным способом является создание семейства классов, в каждом из наследников которого имеется своя реализация "функции", а затем передавать объект и вызывать эту реализацию. В-третьих, готов согласиться, что в некоторых случаях создание и поддержка подобного семейства является более трудоемким нежели грамотные проверки до вызова. Но число таких случаев сильно ограничено. И каждый случай должен быть хорошо обоснован программистом. В большинстве случаев не надо передавать методы. В большинстве случаев надо создавать семейства классов (пример SysFileDeployer, axdBase, ImageListAppl, LedgerBalance и т.п.) В стандартной ax4.0 sp2 имеется всего 128 случаев работы с методами напрямую. многие из этих случаев являются антипаттернами (показывают как НЕ надо делать) Код: Class SysDictClass.hasObjectMethod \Data Dictionary\Tables\AifPipelineComponent\Methods\description \Classes\SysDictClass\hasObjectMethod \Classes\AxInternalBase\setParmMethodAsNotMandatory \Classes\AxdBase\setParmMethodAsMandatory \Classes\BatchJournalRun\canClassGoBatchJournal \Classes\SysBPCheckMemberFunction\checkUseOfCASProtectedAPIs \Classes\SysLabelFind\controlName2Id \Classes\SysTest\hasMethod \Forms\AifPipelineComponent\Data Sources\AifPipelineComponent\Methods\active \Forms\AifPipelineComponent\Methods\generateComponentLookupTable \Forms\SysRecordTemplateTable\Methods\disableIfButton \Forms\SysRecordTemplateTable\Methods\disableIfHasDataMethod Class SysDictClass.hasStaticMethod \Classes\RunBase\getDescription \Classes\SysDictClass\hasStaticMethod \Classes\RunBase\getHelpText \Classes\SysBPCheckClassNode\checkConstructors \Forms\SysClassWizard\Methods\frameworkSetDescription class SysMethodInfo \Classes\SysDictClass\hasObjectMethod \Classes\Global\tableHasInstanceMethod \Classes\Global\tableHasStaticMethod \Classes\SysDictClass\hasStaticMethod \Classes\RunBaseReport\initReportRun \Classes\SysMethodInfo\path \Classes\AxdBaseCreate\insertInPropertyInfoMap \Classes\AxdBaseGenerateXSD\addClassProperties \Classes\AxdBaseGenerateXSD\addDocumentProperties \Classes\AxdBaseRead\buildMethodInfoMap \Classes\WebLet\getDescription \Classes\WebLet\getHelpText \Classes\WebLet\inContext \Classes\WebLet\isEnabled \Classes\ProjListProjTransLayout\setNoOfDecimals \Classes\SysApplicationObjectPathInfo\methodInfo \Classes\xUtilElements\runMode \Classes\SysBPCheckClassNode\checkAbstract \Classes\SysBPCheckClassNode\checkConstructors \Classes\SysBPCheckClassNode\verifyConstructMethod \Classes\SysMethodInfo\getSource \Classes\SysBPCheckFormEditControl\checkLabelUse \Classes\SysBPCheckMemberFunction\check \Classes\SysBPCheckMemberFunction\checkSource \Classes\SysBPCheckMemberFunction\checkAccessSpecifier \Classes\SysBPCheckMemberFunction\checkVariables \Classes\SysMethodInfo\superMethodInfo \Classes\SysMethodInfo\subMethodInfoList \Classes\SysBPCheckMemberFunction\checkAOS \Classes\SysMethodInfo\runMode \Classes\SysBPCheckMemberFunction\initTmpxRefReferences \Classes\SysBPCheckMemberFunction\classDeclaration \Classes\SysBPCheckMemberFunction\checkHelpUse \Classes\SysBPCheckMemberFunction\checkLabelUse \Classes\SysBPCheckMemberFunction\checkUsed \Classes\SysBPCheckMemberFunction\checkUsedMemberFunction \Classes\SysBPCheckMemberFunction\checkUsedMemberFunctionServer \Classes\SysBPCheckMemberFunction\pseuduUtilElements \Classes\SysBPCheckMemberFunction\checkVariablesUse \Classes\SysBPCheckMemberFunction\dispose \Classes\SysBPCheckMemberFunction\init \Classes\SysBPCheckReportControl\checkGeneral \Classes\SysBPCheckReportControl\checkLabelUse \Classes\SysFormBuildDataSource\getMethodInfo \Classes\SysLabelFind\doFormEditControl \Classes\SysMethodInfo\superMethodNode \Classes\SysMethodInfo\toString \Classes\SysSecurity\getFormDisplayMethods \Classes\SysTreenodeWashClassNode\checkConstructors \Classes\xUtilIdElements\runMode Class DictMethod \Classes\smmSalesManagementQueries\allowedMethods \Classes\RunBase\checkCloseDialog \Classes\AifServiceableMethodValidator\validateMethodSignature \Classes\AifServiceableMethodValidator\hasMethod \Classes\AifServiceableMethodValidator\hasPublicAccess \Classes\AifServiceableMethodValidator\hasValidParameters \Classes\AifServiceableMethodValidator\hasValidReturnType \Classes\AifServiceableMethodValidator\validateReceiveDocument \Classes\AifServiceableMethodValidator\validateReceiveDocumentList \Classes\AifServiceableMethodValidator\validateSendDocument \Classes\AifServiceableMethodValidator\validateSendDocumentList \Classes\AifServiceableMethodValidator\validateQueryDocuments \Classes\AifServiceableMethodValidator\validateQueryEntityKeys \Classes\AifServiceableMethodValidator\validateProcessEntity \Classes\AifServiceableMethodValidator\validateProcessEntityList \Classes\AifWebMethodGenerator\getWebMethodParameterTypes \Classes\EditorScripts\getApplicableScripts \Classes\EditorScripts\showScripts \Classes\LedgerGDPdUDataExport\findSMethodBaseType \Classes\LedgerGDPdUDataExport\findSNumOfDecimals \Classes\LedgerGDPdUDataExport\findMethodBaseType \Classes\LedgerGDPdUDataExport\findNumOfDecimals \Classes\LedgerGDPdUFieldWizard\fillMethodNameList \Classes\SysDictClass\invokeObjectMethod \Classes\SysApplCheck\checkTableFieldPnameMustBeUnique \Classes\SysApplCheck\checkTreeNodeNameConflicts \Classes\SysApplCheck\showTableMethodsRunOn \Classes\SysAutoRun\execRun \Classes\SysBPCheckClassNode\checkRunBaseImplementation \Classes\SysBPCheckFormEditControl\checkReference \Classes\SysBPCheckMemberFunction\checkDiscontinuation \Classes\SysBPCheckTable\checkFieldPnameUniqueness \Classes\SysClassWizard\createAbstractMethods \Classes\SysCodeCoverage\postUpdate \Classes\SysDictClass\isInheritedVariable \Classes\SysExcelTemplateField\type \Classes\SysExcelTemplateField\extendedTypeId \Classes\SysExcelTemplateField\help \Classes\SysExcelTemplateField\label \Classes\SysHelpBookDocumentationDeveloper\genApplClassMethodHelp \Classes\SysHelpBookDocumentationDeveloper\genApplTableMethodHelp \Classes\SysHelpBookDocumentationSystem\methodSyntax \Classes\SysHelpBookDocumentationDeveloper\genParmMethodHelp \Classes\SysHelpBookDocumentationDeveloper\genConstructMethodHelp \Classes\SysHelpBookDocumentationDeveloper\processLabels \Classes\SysHelpBookDocumentationSystem\actualDictMethod \Classes\SysHelpBookDocumentationSystem\genClassMethodHelp \Classes\SysHelpBookDocumentationSystem\processLabels \Classes\SysHelpClassMethodWebLet\designView \Classes\SysMethodInfo\classDeclaration \Classes\SysTestCase\testMethods \Classes\SysUmlObjectModel\reverseEngineerClassProperties \Classes\SysUmlObjectModel\reverseEngineerMethod \Classes\SysUmlObjectModel\reverseEngineerParameters \Classes\SysUmlObjectModel\reverseEngineerTableProperties \Classes\WebReportGraph\makeTitle |
|