[x3d-public] Builder pattern for next gen X3DJSAIL [ NOT IMPORTANT ]

John Carlson yottzumm at gmail.com
Sat Jul 31 23:37:28 PDT 2021


I learned Importer/Exporter patterns here:

https://www.amazon.com/Holub-Patterns-Learning-Looking-Professionals/dp/159059388X

I learned about Code Builders from the Dart Discord server, @chgibb.

John

On 8/1/21 1:19 AM, John Carlson wrote:
>
> The main idea is to write X3DLoaderJava, X3DLoaderJSON, X3DLoaderVRML, 
> X3DLoaderJavaScript, X3DLoaderPython, ... , toFileJava, toFileJSON, 
> ... etc. for APIs, API examples, Schemas, Encoded Documents, Object 
> Models, etc. etc.  In a very object-oriented fashion.  If we 
> ultimately do this with XSLT or Java, I don't care, but we should 
> define good interfaces to support immutability and encapsulation.
>
> Suggestion:  Revisit Cameron Browne's "class grammar" for maintaining 
> and enhancing code.  I think we should consider maintaining source 
> code in revision control, or maintaining versions of jars which 
> contain source code.
>
> I have not heard of  a Java Code Builder like there is a Dart code 
> builder.
>
> John
>
> On 8/1/21 12:26 AM, John Carlson wrote:
>>
>> https://howtodoinjava.com/design-patterns/creational/builder-pattern-in-java/
>>
>> Builder in Dart:
>>
>> https://github.com/dart-lang/code_builder
>>
>>
>> I call the Builder pattern the Importer/Exporter pattern. One passes 
>> the Importer or subclass to the node or statement constructor, and 
>> the Exporter, Formatter or subclass is passed to the node or 
>> statement outputter.  I think it would be a good plan to pass a 
>> Builder or Importer to a constructor in Java.
>>
>> Main advantages:   1) Immutability  2) Encapsulation
>>
>> Main disadvantages:  1) code bloat.
>>
>> According to the first link, you create a Builder as an enclosed 
>> class of the class you want to build. You can have a class hierarchy 
>> of Importer/Exporters you want for different encodings, etc.
>>
>> Obviously, I offer this as an alternative to XSLT hell. However, we 
>> may need to bootstrap with XSLT, I think, and it would be good to 
>> have roundtrip with the XSLT. My preference is to bootstrap into 
>> Java. Then add different Exporters as alternatives to the XSLT 
>> Exporter.  For exporting, you pass the exporter to the outputter 
>> method, and then extract any data values using getters on the exporter.
>>
>> Obviously this is a step away from the "Java Beans," "Enterprise Java 
>> Beans," "Plain Old Java Object" and "Data Transfer Object" patterns 
>> of Java.  The important thing is immutability and encapsulation for 
>> proper object-oriented design.
>>
>> I think this would be a good pattern for Blender I/O plugins to 
>> follow. Would it be possible to generate the Blender X3D plugins from 
>> X3DJSAIL?
>>
>> What I will attempt to do is create a new Serializer in JavaScript to 
>> produce Java "Importer/Exporter" examples, but I may need to dig into 
>> X3DJSAIL.  Perhaps I can treat current X3DJSAIL classes as 
>> importer/exporters. I think this way, we can advance step-by-step to 
>> the next generation of X3DJSAIL.
>>
>> Question:  Does C/C++/C# SAI or other SAI already follow this?  Is 
>> this "CreateX3dFromString()"?
>>
>> John
>>
>> Additionally, I will work with es6x3d and x3d.dart to adopt 
>> importer/exporter patterns.
>>
>> I do not see this as a problem per se for Python or Dart. But it 
>> would be good to have exporters for Python and Dart in X3DJSAIL.  It 
>> may help with the pyjnius X3DJSAIL-Python SAI.
>>
>> I am thinking of leaving the org.x3d.web3d.jsail as 
>> Importers/Exporters and starting a new package next to sai and jsail 
>> in X3DJSAIL.  Perhaps there would be some organization of 
>> Importers/Exporters by input/output language under jsail.
>>
>> John
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20210801/994df036/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ghbdliffapgbeehp.png
Type: image/png
Size: 238130 bytes
Desc: not available
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20210801/994df036/attachment-0001.png>


More information about the x3d-public mailing list