From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,3cd3b8571c28b75f X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2003-08-27 06:52:14 PST Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!wn14feed!worldnet.att.net!207.35.177.252!nf3.bellglobal.com!nf1.bellglobal.com!nf2.bellglobal.com!news20.bellglobal.com.POSTED!not-for-mail From: "Warren W. Gay VE3WWG" User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax) X-Accept-Language: en-us, en MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: A Customer's Request For Open Source Software References: <3F44BC65.4020203@noplace.com> <20030822005323.2ff66948.david@realityrift.com> <20030822020403.625ffbf5.david@realityrift.com> <3F4657AD.1040908@attbi.com> <3F4828D9.8050700@attbi.com> <3F48D263.8060004@noplace.com> <3F48E863.3080806@attbi.com> <3F4A02FB.5050504@noplace.com> <3F4CA22B.30608@noplace.com> In-Reply-To: <3F4CA22B.30608@noplace.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Message-ID: <_t23b.5683$nw3.248827@news20.bellglobal.com> Date: Wed, 27 Aug 2003 09:37:12 -0400 NNTP-Posting-Host: 198.96.223.163 X-Complaints-To: abuse@sympatico.ca X-Trace: news20.bellglobal.com 1061991418 198.96.223.163 (Wed, 27 Aug 2003 09:36:58 EDT) NNTP-Posting-Date: Wed, 27 Aug 2003 09:36:58 EDT Organization: Bell Sympatico Xref: archiver1.google.com comp.lang.ada:41892 Date: 2003-08-27T09:37:12-04:00 List-Id: Marin David Condic wrote: > I agree that concurrency is difficult. What I'm talking about is that if > you built a core accounting engine that presented itself to the rest of > the application as an "object" and if that engine initially just > operated within RAM (load and store to a file), you'd have a useful > start. ... > MDC Actually, that is not too far away! I just finished testing some generic database code, that can swing between PostgreSQL and MySQL with just a swap of a "with" statement in the main program (using APQ 2.0). This relies heavily on tagged types and polymorphism, but it works very well. You build your code so that it only needs the database connection Root_Connection_Type'Class (which naturally dispatches when used), and the procedure that this connection object is passed to can do everything else in a database neutral way. This is not to say there aren't some database specific issues, but there are ways to deal with most of these, and some of them in a fairly generic way. Since accounting is such a basic need, I have made plans to include an accounting engine object in a child package, to do just the sort of thing you have suggested. I mean, why build the accounting engine more than once? Everyone needs accounting. The package may fit into the hierarchy structure as something like APQ.Applications.Accounting. If you want to see a rough draft of a PDF manual for APQ version 2.0, email me and I'll send it to you (it includes some generic database code examples). The first thing I had to conquer was generic database programming, since I don't like being locked into one brand of database. Whatever I choose will be the wrong choice for you, or the wrong choice 2 years from now. But this annoyance is nearly out of the way now. I only like to write such things once if possible, and only support one instance of the same code. So the time is now ripe for application objects of this type. It is nearly next on my list of things to do, and I have a big list ;-) -- Warren W. Gay VE3WWG http://home.cogeco.ca/~ve3wwg