parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Получилось

virusav 20.09 12:02

Структура модулей:
user:
api_method/UserLoginApiMethod.p
api_method/UserRegisterApiMethod.p
config/UserConfig.p
controller/UserController.p

user_copy:
api_method/UserCopyRegisterApiMethod.p
config/UserCopyConfig.p - наследуется от UserConfig.p

user_1:
config/UserCloneConfig.p - наследуется от UserCopyConfig
controller/UserCloneController.p
В каждом модуле в конфиге есть:
@GET_sModule[]
	$result[user/user_copy/user_clone]
Результат для модуля user_clone:
controller - /../base/module/user_1/config/../controller/UserCloneController.p
api_method.Register - /../base/module/user_copy/config/../api_method/UserCopyRegisterApiMethod.p
api_method.Login - /../base/module/user/config/../api_method/UserLoginApiMethod.p
Результат для модуля user_copy:
controller - /../base/module/user/config/../controller/UserController.p
api_method.Register - /../base/module/user_copy/config/../api_method/UserCopyRegisterApiMethod.p
api_method.Login - /../base/module/user/config/../api_method/UserLoginApiMethod.p
Результат для модуля user:
controller - /../base/module/user/config/../controller/UserController.p
api_method.Register - /../base/module/user/config/../api_method/UserRegisterApiMethod.p
api_method.Login - /../base/module/user/config/../api_method/UserLoginApiMethod.p
Код:
@auto[sFilePath;sClassName]
	$sCurrentDir[^file:dirname[$sFilePath]]
	$sCurrentDir[^sCurrentDir.mid(^request:document-root.length[])]

	^if($self.hCURRENT_DIR is void){
		$self.hCURRENT_DIR[^hash::create[]]
	}

	$self.hCURRENT_DIR.[$sClassName][
		$.iIndex(^self.hCURRENT_DIR._count[])
		$.sCurrentDir[$sCurrentDir]
		$.sFileName[^file:basename[$sFilePath]]
	]

@getModulePartClassPath[sPartType;sPartName]
	$iCount(^self.hCURRENT_DIR._count[])
	$oClass[$self]

	^for[iCounter](0;$self.hCURRENT_DIR.[$self.CLASS_NAME].iIndex){
		$iIndex($iCount-$iCounter-1)

		$hData[^self.hCURRENT_DIR._at($iIndex)]

		^if($iCounter>0){
			$oClass[^BaseClassLib:getClass[
				$.sClassPath[$hData.sCurrentDir/$hData.sFileName]
			]]
		}

		$sPath[$hData.sCurrentDir/../$sPartType/^BaseStringLib:getStudlyCase[${oClass.sModule}_${sPartName}_$sPartType].p]
		^if(-f $sPath){
			^return[$sPath]

			^break[]
		}
	}

	$result[]
Не знаю, насколько оправдан такой подход, но при наличии в модуле (компоненте) разных видов классов (контроллеры, методы, модели и т.д. наследование можно будет свести к минимуму с заменой только нужных классов.

1. Может, есть уже какое-то решение в мире программирования для подобного случая, чтобы не изобретать велосипед?)
2. Какую практику именования файлов и классов посоветуете?
2.1. Во всех модулях делать имена файлов и классов разными: UserController.p с классом UserController.
2.2. Имена файлов разные, а классы одинаковые: UserController.p с классом ModuleController.
2.3. Имена файлов и классов одинаковые: ModuleController.p с классом ModuleController.