I have a few application design questions that I was hoping someone might have some thoughts on. I'll warn you in advance that this post is kinda long winded. I'll try my best not to use two many trendy buzzwords, but I may not be able to avoid it. :-)
I work for a real-estate company and one of the functions of our website is to (obviously) allow customers to search our listings database. I currently have a fairly straightforward set of PHP pages that accepts search criteria, constructs SQL queries, and then displays the listing data. For quite some time this was more than sufficient for our needs. Recently we added a new application to what we provide that allows customers to sign up to receive new listing notifications based on a certain set of search criteria. I was charged with the responsibility of creating this application. I decided (for various reasons) to implement this application in Perl. As I was putting the Perl script together I realized that I was going to have to duplicate all of the business logic that existed in my PHP pages to build the SQL queries and display the results. For example, different listings have different rules for display. Some bits of information cannot be legally displayed based on the location the listing is in. All of this business logic was wrapped up tightly inside my PHP pages, and I realized I was going to have to implement it again in my Perl script. Worse yet, I realized that if any of this business logic changes (which it often does), I was going to have to remember to change it in TWO places. Up until this point there was only the website, but now that I had two completely seperate applications that I have to maintain whenever anything changes. I realized at this point that I would be really nice if the business logic that determines how to construct the queries and which bits of data to display were completely seperated from the presentation logic that existed in my PHP pages. If I had some sort of component that merely accepted search parameters and returned data then I could access this component from both the PHP page and the Perl script. If the business logic changed later I could simply update the component and I (theoretically speaking) wouldn't have to touch the PHP page or the Perl script. I've been doing research into this kind of application design. From my limited and inexperienced perspective, it does appear that Microsoft does offer some advantages in this area. But COM is not an option for me, for several reasons, not the least of which is the fact that our servers run Linux and I cannot access PHP's COM functions. I have considered setting up a PHP page that runs on a seperate port. This page would accept search criteria via a query string, and then return listing data in XML format. Then on the PHP presentation side (or my Perl script), I would parse the XML and either display it manually, or use XSLT. I don't have a lot of experience with this, however. It seems that XML support in PHP is still in a state of infancy. I'm aware of Sablotron, and I have successfully compiled PHP with Sablotron support. But I've read articles that the SAX implementation that PHP employs is inferior that the DOM model. I've also read that the PHP developers are working on improving the support for XML and XSLT by using libxslt instead of Sablotron in later versions. After reading all of this, it seems like the best thing to do is to wait a bit until XML support in PHP solidifies a little more. Also, I am concerned that the overhead of connecting via TCP (even if on the same physical web server), having a page generate XML, receiving the response, and then having to parse it back out again, might impact peformance too severely. On our website, the most popular thing is searching listings. If I drastically reduce responsiveness by adding all of this overhead, then I've made things easier for programmers, at the expense of the end user. Another technology I was toying around with is Java servlets and Java Beans. I'm a complete newbie when it comes to this stuff too, but from what I've read it seems that Java Beans are designed to wrap up business logic in reusable components. Money is an issue, however, so if I implemented anything in Java I would have to use Apache's Tomcat, and not one of the commercial Java platforms. I realize this is wildly off-topic for this list, but if anyone here has any experience with Tomcat I'd appreciate any advice (off-list if necessary) as to whether I'm barking up the wrong tree or not. :-) Thanks in advance to any advice anyone can give... -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php