parser

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

 

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

Ответ

virusav 05.03.2022 15:29

Варианты для 2 свойств:
1. Выдаем значение свойства в отдельном методе (согласно доке):
@GET_property1[]
	$result[
		$.name[p_1]
		$.value[abc]
	]

@GET_property2[]
	$result[
		$.name[p_2]
		$.value[sddsd]
	]
2. Выдаем значение свойств в одном методе (выглядит топорно, но обработка в одном месте):
@GET_DEFAULT[sField]
	^switch[$sField]{
		^case[property1]{
			$self.[$sField][
				$.name[p_1]
				$.value[abc]
			]
		}
		^case[property2]{
			$self.[$sField][
				$.name[p_2]
				$.value[sddsd]
			]
		}
	}
	$result[$self.[$sField]]
3. Заводим конфиг свойств и при обращении к любому производим первоначальное заполнение всех свойств (удобно тем, что можно задать один конфиг, с которым удобнее работать):
@getData[]
	$result[
		$.property1[
			$.name[p_1]
			$.value[abc]
		]
		$.property2[
			$.name[p_2]
			$.value[sddsd]
		]
	]

@GET_DEFAULT[sField][hData;key;value]
	^if(!def $self.[$sField]){
		$hData[^self.getData[]]
		^hData.foreach[key;value]{
			$self.[$key][$value]
		}
	}
	$result[$self.[$sField]]
Суть всех данных извращений в том, чтобы обращаться к свойствам без создания экземпляра класса: $class:property1.name
Когда свойств немного, то можно использовать @GET_property1, но при большом количестве это не так удобно.

Есть еще свойство с названием таблицы, которое должно заполняться в зависимости от названия класса.
В варианте 1 не получится создать метод @GET_table_name и в нем проверять, что вычислять значение надо только при первом проходе, а потом всегда выдавать значение.
В варианте 3 можно сделать case[table_name] и вычислить один раз.

Понимаю, что все это выглядит очень извращенно, но важно определиться с правильностью подхода к определению значений свойств с учетом удобства и исключения повторного расчета значения одного и того же свойства (например, table_name).