У меня есть две почти идентичные Бобы.
Бин "Item" содержит уникальный идентификатор (первичный ключ), имя и массив, который содержит структуры с данными для разных пользователей, связанных с "Item".
Бин "Пользователь" содержит уникальный идентификатор (первичный ключ), имя, фамилию и массив, который содержит структуры с данными различных Элементов, связанных с "Пользователем".
Оба компонента содержат два метода, которые записывают новые данные в структуры массива или удаляют элементы массива, а также методы установки и получения аргументов.
Компоненты отличаются друг от друга только через имена аргументов, количество аргументов, принимаемых каждым методом init, и число получателей и установщиков.
Итак, я хочу создать "Абстрактный" Бин, от которого наследуются "Предмет" и "Пользователь". Я могу сделать это, используя extends в Beans для получения абстрактных методов, но как мне переопределить имена аргументов и имена переменных. То есть имя аргумента ArrayOfData в AbstractBean на самом деле никому ничего не говорит. Я хотел бы иметь ItemHasMaterialsArray и UserHasItemsArray в качестве имен в компонентах Item и User.
AbstractBean
<cfcomponent name="AbstractBean" output="false">
<cffunction name="init" access="public" hint="constructor" returntype="AbtractBean">
<cfargument name="Identifier" required="false" type="Numeric" default="0">
<cfargument name="Name" required="false" type="String" default="">
<cfargument name="ArrayOfData" required="false" type="Array" default="#arrayNew(1)#">
<cfset variables.instance = structNew() />
<cfset setIdentifier(arguments.identifier) />
<cfset setName(arguments.name) />
<cfset setArrayOfData(arguments.ArrayOfData) />
<cfreturn this />
</cffunction>
<cffunction name="updateArrayOfData" access="public" output="true" returntype="boolean">
<cfargument name="blank" type="Struct" required="true">
<cfset var i = 0 />
<cfset var form = arguments.blank />
<cfset var ArrayOfData = arrayNew(1) />
<cfset ArrayOfData = this.getArrayOfData() />
<cfloop index="i" from="#arrayLen(ArrayOfData)#" to="1" step="-1">
<cfif ArrayOfData[i].Amount neq structFind(form,ArrayOfData[i].Id) and LsIsNumeric(structFind(form,ArrayOfData[i].Id))>
<cfset ArrayOfData[i].Amount = structFind(form,ArrayOfData[i].Id) />
<cfelse>
<cfset arrayDeleteAt(ArrayOfData,i) />
</cfif>
</cfloop>
<cfset setArrayOfData(ArrayOfData) />
<cfreturn true />
</cffunction>
<cffunction name="deleteArrayOfDataElement" access="public" output="false" returntype="boolean">
<cfargument name="blank" type="Struct" required="true">
<cfset var i = 0 />
<cfset var form = arguments.blank />
<cfset var ArrayOfData = arrayNew(1) />
<cfset ArrayOfData = this.getArrayOfData() />
<cfloop index="i" from="#arrayLen(ArrayOfData)#" to="1" step="-1">
<cfif not listFind(form.del,ArrayOfData[i].UserId,',')>
<cfset arrayDeleteAt(ArrayOfData,i) />
</cfif>
</cfloop>
<cfset setArrayOfData(ArrayOfData) />
<cfreturn true />
</cffunction>
<cffunction name="setIdentifier" hint="setter" access="private" output="false" returntype="Void">
<cfargument name="identifier" required="true" type="Numeric" hint="Primary Key, really" />
<cfset variables.instance.Identifier = arguments.Identifier />
</cffunction>
<cffunction name="getIdentifier" hint="getter" access="public" output="false" returntype="Numeric">
<cfreturn variables.instance.identifier />
</cffunction>
<cffunction name="setName" access="private" output="false" returntype="Void">
<cfargument name="name" required="true" type="String" />
<cfset variables.instance.Name = arguments.Name />
</cffunction>
<cffunction name="getName" access="public" output="false" returntype="String">
<cfreturn variables.instance.Name />
</cffunction>
<cffunction name="setArrayOfData" access="private" output="false" returntype="Void">
<cfargument name="ArrayOfData" required="true" type="Array" />
<cfset variables.instance.ArrayOfData = arguments.ArrayOfData />
</cffunction>
<cffunction name="getArrayOfData" access="public" output="false" returntype="Array">
<cfreturn variables.instance.ArrayOfData />
</cffunction>
</cfcomponent>
В моем бине User я хотел бы, чтобы метод init также принимал firstname в качестве аргумента и переопределял имена переменных в моих методах. С сообщением имен мой другой код, то есть вызывающий получатель, будет намного чище. User.getUserHasMaterials () читается намного лучше, чем User.getArrayOfData (), imo. это вообще возможно? Если нет, то я думаю, что придется пожертвовать читаемостью переменных, чтобы избежать дублирования.