Build your datatypes
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Build your datatypes

on

  • 1,134 views

 

Statistics

Views

Total Views
1,134
Views on SlideShare
1,124
Embed Views
10

Actions

Likes
0
Downloads
11
Comments
0

1 Embed 10

https://twitter.com 10

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Build your datatypes Presentation 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