<html><body bgcolor="#FFFFFF"><div>Yep, I'm dropping factories from logging in my next ESAPI sprint - I'm almost there.<br><br>Jim Manico<div><a href="mailto:jim@manico.net">jim@manico.net</a></div></div><div><br>On Mar 19, 2009, at 2:53 AM, Andrew van der Stock &lt;<a href="mailto:vanderaj@owasp.org">vanderaj@owasp.org</a>> wrote:<br><br></div><div></div><blockquote type="cite"><div>+1 vote for no factories.&nbsp;<div><br></div><div>Although PHP can re-create the Factory design pattern, PHP doesn't actually have the OO richness to support the Adapter, Factory and Decorator patterns properly without lots of fancy footwork. There's just no bonus for doing it, and lots of performance negatives.</div><div><br></div><div>No matter how nice it would be to use fancy OO patterns to make the library less likely to be hand hacked directly, in PHP, it's always simpler to use:</div><div><br></div><div>require_once($yourClassGoesHere);</div><div><div><br></div><div>than to create any of these fancy patterns.</div><div><br></div><div>Please - more simplicity!</div><div><br></div><div>thanks,</div><div>Andrew</div><div><br><div><div>On 13/03/2009, at 5:34 AM, Alex Smolen wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Yeah, perfect, that's what I was getting at. You may want to take a look at how I do the logging in .NET ESAPI to see one way of getting rid of the LogFactory.<div><div><br></div><div>Thanks,</div><div>Alex<br><div><div>On Mar 11, 2009, at 7:18 PM, Jim Manico wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div bgcolor="#ffffff"><div><font face="Arial" size="2">Oh no no no - I do not want to duplicate the Log Factory, in fact I think factories are going away.</font></div><div><font face="Arial" size="2"></font>&nbsp;</div><div><font face="Arial" size="2">I only want to make your choice of Authenticator, Validator, etc. implementation be configurable. See the current Java codebase in Google, I just checked in a new version of ESAPI.properties that lets you configure which log implementation you want to use. It's that configuration change that I want to port to the rest of ESAPI's major interfaces. Better, Alex?</font></div><div><font face="Arial" size="2"></font>&nbsp;</div><div><font face="Arial" size="2">- Jim</font></div><blockquote style="padding-right: 0px; padding-left: 5px; margin-left: 5px; border-left-color: rgb(0, 0, 0); border-left-width: 2px; border-left-style: solid; margin-right: 0px; "><div style="font: normal normal normal 10pt/normal arial; ">----- Original Message -----</div><div style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(228, 228, 228); font: normal normal normal 10pt/normal arial; background-position: initial initial; "><b>From:</b><span class="Apple-converted-space">&nbsp;</span><a title="me@alexsmolen.com" href="mailto:me@alexsmolen.com">Alex Smolen</a></div><div style="font: normal normal normal 10pt/normal arial; "><b>To:</b><span class="Apple-converted-space">&nbsp;</span><a title="jim.manico@owasp.org" href="mailto:jim.manico@owasp.org">Jim Manico</a><span class="Apple-converted-space">&nbsp;</span>;<span class="Apple-converted-space">&nbsp;</span><a title="owasp-esapi@lists.owasp.org" href="mailto:owasp-esapi@lists.owasp.org"><a href="mailto:owasp-esapi@lists.owasp.org">owasp-esapi@lists.owasp.org</a></a></div><div style="font: normal normal normal 10pt/normal arial; "><b>Sent:</b><span class="Apple-converted-space">&nbsp;</span>Wednesday, March 11, 2009 12:38 PM</div><div style="font: normal normal normal 10pt/normal arial; "><b>Subject:</b><span class="Apple-converted-space">&nbsp;</span>re: [OWASP-ESAPI] Using Other Authenticators</div><div><br></div><font style="font-size: 10pt; font-family: Tahoma; ">So if I understand your suggested change, you are proposing that we change several classes to follow the current Java ESAPI logging implementation that has a separate JavaLogFactory class.<br><br>I think that this approach is overkill. If you look at the ESAPI architecture, the ESAPI class itself is sort of a factory (<a href="http://en.wikipedia.org/wiki/Factory_method_pattern"><a href="http://en.wikipedia.org/wiki/Factory_method_pattern">http://en.wikipedia.org/wiki/Factory_method_pattern</a></a>). Its methods return an Interface which can be changed to a particular implementation. However, right now, you have to change the code in that class to return your own preferred implementation. I suggest that you change that ESAPI class to accept something from the configuration file to determine what class to load for each particular function (Authenticator, Validator, etc). Then, you don't need JavaLogFactory or any other factories.<br><br>i.e. rather than this<br><br>&nbsp;&nbsp;&nbsp; public static Encryptor encryptor() {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (ESAPI.encryptor == null)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ESAPI.encryptor = new JavaEncryptor();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ESAPI.encryptor;<br>&nbsp;&nbsp;&nbsp; }<br><br>do this<br><br>&nbsp;&nbsp;&nbsp;&nbsp; public static Encryptor encryptor() {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (ESAPI.encryptor == null)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ESAPI.encryptor = Class.forName(securityConfiguration.EncryptorClassName).newInstance();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ESAPI.encryptor;<br>&nbsp;&nbsp;&nbsp; }<br><br></font></blockquote></div></span></blockquote></div></div></div></div></blockquote></div><br></div></div></div></blockquote></body></html>