Your SlideShare is downloading. ×
Build your datatypes
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Build your datatypes

843

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
843
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Build your datatypes
  • 2. About me• Edi Modrić• Computer engineering masters degree• Working at Netgen for 5 years • 1 year of .Net development • 4 years of eZ Publish development • Certified eZ Publish developer • eZ Tags maintainer • Collaborating with eZ Systems on ezp-next for 8 months• @emodric• edi@netgen.hr
  • 3. Agenda• Primary agendas • Build a field type using public API • Test the hell out of it• Secondary agendas (if time permits) • Comparison to legacy datatypes • Integration with eZ Publish 5 using Symfony
  • 4. Workshop• One hour of coding • Try to build the field type and test it• Ideas • Try to port your existing datatype OR • Try to modify the one presented today OR • Some examples • Storing dates < 1.1.1970 • Storing and validating IP address • Storing and validating social security number • …• Work in groups, help each other
  • 5. What is a datatype?• Base building block of all content in eZ Publish • Collection of methods to store, read and validate content• Object oriented architecture of content model• Class – blueprint of a single piece of content • Collection of class attributes, which are of some (data)type• Object – a single piece of content • Instance of a class • Collection of object attributes, values of class attribute
  • 6. What is a datatype?
  • 7. Datatype + public API = field type• Initial idea was to demo the eZ Tags datatype • Complicated • We’re time limited• eZ Publish 5 is nearly here • Demo the future, not the past
  • 8. Datatype + public API = field type• Content class = Content type• Content object = Content• Content class attribute = Field definition• Content object attribute = Field• Object attribute content = Field value• Datatype = Field type
  • 9. Datatype + public API = field type• $ cd /var/www/ezp-next/• $ rm –rf settings/• $ git remote add emodric https://github.com/emodric/ezp- next.git• $ git checkout -b nginteger• $ git pull emodric nginteger• $ php composer.phar update --dev• $ ./Netgen/runtests.sh
  • 10. Datatype + public API = field type
  • 11. Datatype + public API = field type• eZPublishSPIFieldTypeFieldType • getFieldTypeIdentifier • acceptValue / getEmptyValue • fromHash / toHash • fromPersistenceValue / toPersistenceValue • getSettingsSchema / getValidatorConfigurationSchema • validateFieldSettings / validateValidatorConfiguration • validate • getName • isSearchable
  • 12. Datatype + public API = field type• eZPublishSPIFieldTypeFieldStorage • storeFieldData • getFieldData • deleteFieldData • hasFieldData • getIndexData• eZPublishSPIFieldTypeIndexable• eZPublishSPIFieldTypeValidationError
  • 13. Datatype + public API = field type• eZPublishCoreFieldTypeFieldType • Abstract that implements …SPIFieldTypeFieldType • Default behavior of some methods + validator handling• eZPublishCoreFieldType[GatewayBasedStorage|Null Storage] • Abstracts that implement …SPIFieldTypeFieldStorage• eZPublishCoreFieldTypeStorageGateway • Abstract for gateways to external storage • used by GatewayBasedStorage
  • 14. Datatype + public API = field type• eZPublishCoreFieldTypeValue • Abstract for field value • Optional, but should be included• eZPublishCoreFieldTypeValidationError • Implementation of …SPIFieldTypeValidationError• eZPublishCoreFieldTypeValidator • Abstract for all validators to extend• eZPublishCoreFieldTypeFileService
  • 15. “I thought I fixed that” - why testing matters• Testing is an integral part of any software development • Keeps your code rock solid • Feature and future proof • Gives you a piece of mind• Testing framework in ezp-next is preconfigured BUT • One „hack” is needed if you’re using external storage • Updating database schema fixtures • eZPublishCorePersistenceLegacyTests_fixtures schema.sqlite.sql • Dependency injection configuration
  • 16. “I thought I fixed that” - why testing matters• Testing field type integration with public API • Using real world implementation of repository • Tests if our field type plays well with others• Testing field type integration with persistence SPI • Hooks directly into persistence implementation • Tests if our field type stores and loads data correctly• Unit testing of the field type • Tests the field type methods (units), one by one
  • 17. What about legacy stack?• Legacy datatypes are not going anywhere • No admin interface based on Symfony stack • To actually use your field type, you WILL need legacy datatype• https://github.com/emodric/nginteger.git • Legacy datatype prepared for comparison
  • 18. Field type vs. datatype• No difference in functionality• Advantages over datatypes is obvious • Much much much easier testing • Clear separation of concerns • No POST variables • No SQL • No file uploads • More readable and understandable code • Object oriented code
  • 19. Q&A42Edi Modrić emodricedi@netgen.hr

×