SlideShare una empresa de Scribd logo
1 de 26
Magritte 2
Magritte 3
Im
  pro                   Ne
     ved
                          w
Magritte: Describe once,
       get everywhere
•   Introspection          • Object persistency
•   Reflection
                           • Object indexing
•   Documentation
                           • Object setup
•   Viewer building
                           • Object verification
•   Form/Editor building
                           • Object adaption
•   Report building

•   Data validation        • Object customization

•   Query processing       • and much more
Why Magritte 3                          All in all the "new" Magritte would look like in the following
From: Lukas Renggli                                                     example. Imagine a shop item with the accessor #place:

 November 2010                                                           Item>>place
                                                                            ^ place
I wrote a proposal this summer of want to proceed on                     Item>>place: aString
that, but of course I had to finish my writing and never actually           place := aString
found the time to implement it:
                                                                        The meta-description is defined on the instance-side and annotated. It
--------------------                                                    can refer to itself for the possible places:
I propose to perform the following (non-backward compatible) changes     Item>>placeDescription
in the Magritte 2 code-base to resolve some major annoyances and            <magritte>
issues that keep on reoccurring:
                                                                            ^ MASingleOptionDescription new
- Move descriptions from class-side to instance-side. This resolves           options: self possiblePlaces;
various issues such as cache-invalidation, instance specific                  label: 'Place of Item';
descriptions, dynamic descriptions, context dependent descriptions,           accessor: #place;
etc. Furthermore the descriptions will be closer to the code they             yourself
describe and it will be possible to describe class- and instance-side
of an object, not just the instance-side.                               Class extensions can modify a description using:
- Rename the method #description as the default entry point into         Item>>placeDescriptionXmlStorage: aDescription
Magritte to #magritteDescription. This avoids common problems where         <magritte: #placeDescription>
the domain model already defines such a method.
                                                                            ^ placeDescription xmlTag: 'xname'
- Instead of using a naming convention for description methods, use a
pragma called <magritte> to annotate the methods. And to extend and     Since these changes are not backward compatible I'll try to provide
change existing descriptions use <magritte: aSelector>. Finally all     automatic refactorings for most parts. Moving existing code to the new
Smalltalk implementation reached a consensus of pragmas that can be     codebase will certainly cause some problems, but in the long run I
safely used cross-platform.                                             believe this to be a much better approach than the current one. If
                                                                        people have any feedback, concerns or other changes that would be
                                                                        important in the same run I am happy to hear them.
Issues with Magritte2
• Name collision with #description
• class-side description:
 •   Cache-invalidation

 •   dynamic descriptions

 •   instance specific descriptions

 •   context dependent descriptions
Magritte 3
Magritte 3
Descriptions move from class to instance.
Magritte 3
Descriptions move from class to instance.
 Use <magritteDescription> pragmas
rather than naming convention.
Magritte 3
Descriptions move from class to instance.
 Use <magritteDescription> pragmas
rather than naming convention.
All descriptions are dynamically generated.
Magritte 3
Descriptions move from class to instance.
 Use <magritteDescription> pragmas
rather than naming convention.
All descriptions are dynamically generated.
Rename #description to
#magritteDescription
Magritte 3
Descriptions move from class to instance.
 Use <magritteDescription> pragmas
rather than naming convention.
All descriptions are dynamically generated.
Rename #description to
#magritteDescription
Non-backward compatible
Demo
Magritte 2                  Magritte 3

     #description            #magritteDescription


  class-side descriptions    instance-side description

   #descriptionXXX          <magritteDescription>


#magritteDynamicObject            Not required

#descriptionContainer        <magritteContainer>
Refactoring support
Gofer it
  squeaksource: 'MetacelloRepository';
  package: 'ConfigurationOfMagritte3';
  load.

ConfigurationOfMagritte3 project stableVersion load:'Tools'
Refactoring demo
MMAttendee class>>#descriptionBookingDate
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself
MMAttendee class>>#descriptionBookingDate
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself


MMAttendee>>#descriptionBookingDate

 ^ MADateDescription new
   priority: 30;
   label: 'Booking date';
   tooltip: 'When the attendee booked';
   accessor: #bookingDate;
   default: [ Date today ] magritteDynamicObject;
   yourself
MMAttendee class>>#descriptionBookingDate
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself


MMAttendee>>#descriptionBookingDate
  <magritteDescription>
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself
MMAttendee class>>#descriptionBookingDate
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: [ Date today ] magritteDynamicObject;
    yourself


MMAttendee>>#descriptionBookingDate
  <magritteDescription>
  ^ MADateDescription new
    priority: 30;
    label: 'Booking date';
    tooltip: 'When the attendee booked';
    accessor: #bookingDate;
    default: Date today;
    yourself
Refactoring
 Move class-side descriptions to instance-
side
add <magritteDescription>
Works for description extensions.
 Operates at a method, class or package
level
Battle-tested in translating Pier
Refactoring will not
remove empty class-side categories
convert class-side message sends within
descriptions to add class
convert calls from #description to
#magritteDescription

Simplify Magritte 1 or 2 dynamic description work-
arounds
Remove #magritteDynamicObject and it’s associated
block
Porting guidelines
1. Use the refactoring support to move class-side
   descriptions to instance side descriptions with pragmas -
   making sure that any accessors to class side methods are
   either prefixed with ‘class’ or moved to the instance side.
2. remove #magritteDynamic and remove the block around
   the method.
3. search for all senders and implementors of #description
   in your code, if they are magritte descriptions rename the
   selector from #description to #magritteDescription 
4. Remove any empty categories on the class side.
Status
All tests green.
Although the API changes appear significant the code
changes within Magritte are less significant and mainly
localised to MAPragmaBuilder
Pier has been ported to Magritte 3 (Pier 3) and is stable.
Magritte-Json      and Magritte-XMLBinding ported
Other Magritte add-ons such Magritte-JQuery un-ported
No performance testing - descriptions are no longer
cached. Is this significant in the context of an application?
Next steps
•   Install:
Gofer it
    squeaksource: 'MetacelloRepository';
    package: 'ConfigurationOfMagritte3';
    load.

ConfigurationOfMagritte3 project stableVersion load:'Seaside'.

Gofer it
    squeaksource: 'MetacelloRepository';
    package: 'ConfigurationOfMagritte3AddOns';
    load.

ConfigurationOfMagritte3 project stableVersion load.



•   Use the refactoring tools to move to Magritte 3.
•   Profile performance within your application.
Load Sample

Gofer it
  url: 'http://ss3.gemstone.com/ss/MagritteMagic';
  package: 'ConfigurationOfMagritteMagic';
  load.

(Smalltalk at: #ConfigurationOfMagritteMagic) load.
Further information

• Seaside Book:
  http://book.seaside.st/book/advanced/magritte

• Lukas's site:  
  http://www.lukas-renggli.ch/smalltalk/magritte

• Magritte/Pier mail list:
  <smallwiki@iam.unibe.ch>

Más contenido relacionado

Similar a Magritte3

Pier Migration Workshop
Pier Migration WorkshopPier Migration Workshop
Pier Migration WorkshopESUG
 
Metamodeling of custom Pharo images
 Metamodeling of custom Pharo images Metamodeling of custom Pharo images
Metamodeling of custom Pharo imagesESUG
 
Grails Custom Tag lib
Grails Custom Tag libGrails Custom Tag lib
Grails Custom Tag libAli Tanwir
 
GraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptxGraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptxSoham Dasgupta
 
Renaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit LondonRenaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit LondonHostedbyConfluent
 
From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2Alessandro Molina
 
ng-grid and a Simple REST API
ng-grid and a Simple REST APIng-grid and a Simple REST API
ng-grid and a Simple REST APIBackand Cohen
 
Part 1: ng-grid and a Simple REST API
Part 1: ng-grid and a Simple REST APIPart 1: ng-grid and a Simple REST API
Part 1: ng-grid and a Simple REST APIreneechemel
 
Pdf tech deep dive 42 paris
Pdf tech deep dive 42 parisPdf tech deep dive 42 paris
Pdf tech deep dive 42 parisLaure Vergeron
 
Multi-tenancy with Rails
Multi-tenancy with RailsMulti-tenancy with Rails
Multi-tenancy with RailsPaul Gallagher
 
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...IRJET Journal
 
Does your code spark joy? Refactoring techniques to make your life easier.
Does your code spark joy? Refactoring techniques to make your life easier.Does your code spark joy? Refactoring techniques to make your life easier.
Does your code spark joy? Refactoring techniques to make your life easier.Juciellen Cabrera
 
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023Prasta Maha
 
Ember-CLI Blueprints for fun and profit
Ember-CLI Blueprints for fun and profitEmber-CLI Blueprints for fun and profit
Ember-CLI Blueprints for fun and profitSalesforce Engineering
 
GumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWSGumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWSDataStax Academy
 
Angular Weekend
Angular WeekendAngular Weekend
Angular WeekendTroy Miles
 

Similar a Magritte3 (20)

Pier Migration Workshop
Pier Migration WorkshopPier Migration Workshop
Pier Migration Workshop
 
GraphQL-ify your APIs
GraphQL-ify your APIsGraphQL-ify your APIs
GraphQL-ify your APIs
 
Metamodeling of custom Pharo images
 Metamodeling of custom Pharo images Metamodeling of custom Pharo images
Metamodeling of custom Pharo images
 
Advanced guide to Quartz plugin
Advanced guide to Quartz pluginAdvanced guide to Quartz plugin
Advanced guide to Quartz plugin
 
Grails Custom Tag lib
Grails Custom Tag libGrails Custom Tag lib
Grails Custom Tag lib
 
Grails custom tag lib
Grails custom tag libGrails custom tag lib
Grails custom tag lib
 
GraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptxGraphQL_devoxx_2023.pptx
GraphQL_devoxx_2023.pptx
 
Renaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit LondonRenaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit London
 
From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2From SQLAlchemy to Ming with TurboGears2
From SQLAlchemy to Ming with TurboGears2
 
ng-grid and a Simple REST API
ng-grid and a Simple REST APIng-grid and a Simple REST API
ng-grid and a Simple REST API
 
Part 1: ng-grid and a Simple REST API
Part 1: ng-grid and a Simple REST APIPart 1: ng-grid and a Simple REST API
Part 1: ng-grid and a Simple REST API
 
Pdf tech deep dive 42 paris
Pdf tech deep dive 42 parisPdf tech deep dive 42 paris
Pdf tech deep dive 42 paris
 
Multi-tenancy with Rails
Multi-tenancy with RailsMulti-tenancy with Rails
Multi-tenancy with Rails
 
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
 
Does your code spark joy? Refactoring techniques to make your life easier.
Does your code spark joy? Refactoring techniques to make your life easier.Does your code spark joy? Refactoring techniques to make your life easier.
Does your code spark joy? Refactoring techniques to make your life easier.
 
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
 
Ember-CLI Blueprints for fun and profit
Ember-CLI Blueprints for fun and profitEmber-CLI Blueprints for fun and profit
Ember-CLI Blueprints for fun and profit
 
Extending Node.js using C++
Extending Node.js using C++Extending Node.js using C++
Extending Node.js using C++
 
GumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWSGumGum: Multi-Region Cassandra in AWS
GumGum: Multi-Region Cassandra in AWS
 
Angular Weekend
Angular WeekendAngular Weekend
Angular Weekend
 

Último

Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 

Último (20)

Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

Magritte3

  • 2. Magritte 3 Im pro Ne ved w
  • 3. Magritte: Describe once, get everywhere • Introspection • Object persistency • Reflection • Object indexing • Documentation • Object setup • Viewer building • Object verification • Form/Editor building • Object adaption • Report building • Data validation • Object customization • Query processing • and much more
  • 4. Why Magritte 3 All in all the "new" Magritte would look like in the following From: Lukas Renggli example. Imagine a shop item with the accessor #place: November 2010 Item>>place ^ place I wrote a proposal this summer of want to proceed on Item>>place: aString that, but of course I had to finish my writing and never actually place := aString found the time to implement it: The meta-description is defined on the instance-side and annotated. It -------------------- can refer to itself for the possible places: I propose to perform the following (non-backward compatible) changes Item>>placeDescription in the Magritte 2 code-base to resolve some major annoyances and <magritte> issues that keep on reoccurring: ^ MASingleOptionDescription new - Move descriptions from class-side to instance-side. This resolves options: self possiblePlaces; various issues such as cache-invalidation, instance specific label: 'Place of Item'; descriptions, dynamic descriptions, context dependent descriptions, accessor: #place; etc. Furthermore the descriptions will be closer to the code they yourself describe and it will be possible to describe class- and instance-side of an object, not just the instance-side. Class extensions can modify a description using: - Rename the method #description as the default entry point into Item>>placeDescriptionXmlStorage: aDescription Magritte to #magritteDescription. This avoids common problems where <magritte: #placeDescription> the domain model already defines such a method. ^ placeDescription xmlTag: 'xname' - Instead of using a naming convention for description methods, use a pragma called <magritte> to annotate the methods. And to extend and Since these changes are not backward compatible I'll try to provide change existing descriptions use <magritte: aSelector>. Finally all automatic refactorings for most parts. Moving existing code to the new Smalltalk implementation reached a consensus of pragmas that can be codebase will certainly cause some problems, but in the long run I safely used cross-platform. believe this to be a much better approach than the current one. If people have any feedback, concerns or other changes that would be important in the same run I am happy to hear them.
  • 5. Issues with Magritte2 • Name collision with #description • class-side description: • Cache-invalidation • dynamic descriptions • instance specific descriptions • context dependent descriptions
  • 7. Magritte 3 Descriptions move from class to instance.
  • 8. Magritte 3 Descriptions move from class to instance. Use <magritteDescription> pragmas rather than naming convention.
  • 9. Magritte 3 Descriptions move from class to instance. Use <magritteDescription> pragmas rather than naming convention. All descriptions are dynamically generated.
  • 10. Magritte 3 Descriptions move from class to instance. Use <magritteDescription> pragmas rather than naming convention. All descriptions are dynamically generated. Rename #description to #magritteDescription
  • 11. Magritte 3 Descriptions move from class to instance. Use <magritteDescription> pragmas rather than naming convention. All descriptions are dynamically generated. Rename #description to #magritteDescription Non-backward compatible
  • 12. Demo
  • 13. Magritte 2 Magritte 3 #description #magritteDescription class-side descriptions instance-side description #descriptionXXX <magritteDescription> #magritteDynamicObject Not required #descriptionContainer <magritteContainer>
  • 14. Refactoring support Gofer it squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfMagritte3'; load. ConfigurationOfMagritte3 project stableVersion load:'Tools'
  • 16. MMAttendee class>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself
  • 17. MMAttendee class>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself MMAttendee>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself
  • 18. MMAttendee class>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself MMAttendee>>#descriptionBookingDate <magritteDescription> ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself
  • 19. MMAttendee class>>#descriptionBookingDate ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: [ Date today ] magritteDynamicObject; yourself MMAttendee>>#descriptionBookingDate <magritteDescription> ^ MADateDescription new priority: 30; label: 'Booking date'; tooltip: 'When the attendee booked'; accessor: #bookingDate; default: Date today; yourself
  • 20. Refactoring Move class-side descriptions to instance- side add <magritteDescription> Works for description extensions. Operates at a method, class or package level Battle-tested in translating Pier
  • 21. Refactoring will not remove empty class-side categories convert class-side message sends within descriptions to add class convert calls from #description to #magritteDescription Simplify Magritte 1 or 2 dynamic description work- arounds Remove #magritteDynamicObject and it’s associated block
  • 22. Porting guidelines 1. Use the refactoring support to move class-side descriptions to instance side descriptions with pragmas - making sure that any accessors to class side methods are either prefixed with ‘class’ or moved to the instance side. 2. remove #magritteDynamic and remove the block around the method. 3. search for all senders and implementors of #description in your code, if they are magritte descriptions rename the selector from #description to #magritteDescription  4. Remove any empty categories on the class side.
  • 23. Status All tests green. Although the API changes appear significant the code changes within Magritte are less significant and mainly localised to MAPragmaBuilder Pier has been ported to Magritte 3 (Pier 3) and is stable. Magritte-Json and Magritte-XMLBinding ported Other Magritte add-ons such Magritte-JQuery un-ported No performance testing - descriptions are no longer cached. Is this significant in the context of an application?
  • 24. Next steps • Install: Gofer it squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfMagritte3'; load. ConfigurationOfMagritte3 project stableVersion load:'Seaside'. Gofer it squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfMagritte3AddOns'; load. ConfigurationOfMagritte3 project stableVersion load. • Use the refactoring tools to move to Magritte 3. • Profile performance within your application.
  • 25. Load Sample Gofer it url: 'http://ss3.gemstone.com/ss/MagritteMagic'; package: 'ConfigurationOfMagritteMagic'; load. (Smalltalk at: #ConfigurationOfMagritteMagic) load.
  • 26. Further information • Seaside Book: http://book.seaside.st/book/advanced/magritte • Lukas's site:   http://www.lukas-renggli.ch/smalltalk/magritte • Magritte/Pier mail list: <smallwiki@iam.unibe.ch>

Notas del editor

  1. Although I&amp;#x2019;m saying Magritte 2 this equally applies to Magritte 1 - the only difference between Magritte 1 and 2 was some changes for Seaside 30 compatibility\n
  2. Although I&amp;#x2019;m saying Magritte 2 this equally applies to Magritte 1 - the only difference between Magritte 1 and 2 was some changes for Seaside 30 compatibility\n
  3. Although I&amp;#x2019;m saying Magritte 2 this equally applies to Magritte 1 - the only difference between Magritte 1 and 2 was some changes for Seaside 30 compatibility\n
  4. Although I&amp;#x2019;m saying Magritte 2 this equally applies to Magritte 1 - the only difference between Magritte 1 and 2 was some changes for Seaside 30 compatibility\n
  5. Magritte is a meta-description framework - it allows you to add meta-data descriptions to your domain objects which can then be used to automatically generate reports, editors but not just that I&amp;#x2019;m finding it increasingly useful for serialising into other industry standard formats such as Json, XML then materialising the domain objects back from those formats.\n
  6. \n
  7. \n
  8. allows renaming so that descriptions can be along-side the accessors\n
  9. allows renaming so that descriptions can be along-side the accessors\n
  10. allows renaming so that descriptions can be along-side the accessors\n
  11. allows renaming so that descriptions can be along-side the accessors\n
  12. allows renaming so that descriptions can be along-side the accessors\n
  13. \n
  14. \n
  15. Magritte-Deprecated - describe\nMagritte-Pharo-Tools\n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n