[TYPO3-50-general] RFC: Arguments with identifiers

Sebastian Kurfürst sebastian at typo3.org
Thu Jan 8 10:10:49 CET 2009


Hey everybody,

I have some ideas how to improve argument handling with respect to  
unique identifiers. Please comment on the ideas, as I want to  
implement them later today for a first draft.

Problem Description:
While implementing CRUD-functionality, in the "Update" case, I  
stumbled over the following issue:
- A form of the Domain Object is displayed, and to identify the record  
on the server again, we need some identifier property which is sent  
back to the server. The Form ViewHelper will have support for that.
- Now, let's assume we edit a "Customer". The data is sent back to the  
server in the following form:
	customer[identifier] = identifier-property
	customer[name] = Sebastian Kurfürst
	customer[city] = Dresden
- On the server, automatic Property Mapping of the "customer" property  
takes place, thus you get a _new_ instance of a Customer object on the  
server.
- However, you somehow need a possibility to get the "identifier"  
property, which is not mapped to the domain object - as you need to  
retrieve the right object from the Repository and to the real mapping.

So, the updateAction would look as follows:

// an argument "customer" of the type "F3\Example\Domain\Customer" was  
registered
public function updateAction() {
	$customer = $this->arguments['customer']->getValue();
	$customerIdentifier = // GET IDENTIFIER
	$persistentCustomer = $this->customerRepository- 
 >findByIdentifier($customerIdentifier);
	$this->propertyMapper->map($customer, $persistentCustomer);
}

The problem is how the // GET IDENTIFIER is done.

Proposed solution:
I'd like to make the "Argument" object aware of an identifier.
Thus, in the above example, you would write $this- 
 >arguments['customer']->getIdentifier() instead of // GET IDENTIFIER.

However, internally, it is not clean if the "Argument" object directly  
checks for the "identifier" array property.
That's why I'd like to add a new method to PropertyConverters which is  
called "getIdentifier()" - resolving the above identifier.
As not all PropertyConverters need such a method, I'd encapsulate this  
in a new interface. (Property\Converter\IdentifierFacetInterface or so)

The Property Mapper would do the following:
- if the PropertyConverter implements the above interface, it calls  
"getIdentifier()" on the PropertyConverter.
- The returned value is mapped to a defined property on the target  
object by the Property Mapper.

Affected Classes:
- Argument (new get/setIdentifier method)
- PorpertyMapper (handling of the interface)
- DomainObjectPropertyConverter (implements the above interface)

I'm curious about your comments :-)

Greets,
Sebastian

--
Gimme five!


More information about the TYPO3-project-5_0-general mailing list