I'm a systems architect responsible for making a pre-study on a webstore system for a customer. We need to find a well-done e-commerce base to extend from and have heard a lot of good about AbleCommerce.
I originally sent this as an email to the salesrep that contacted me but was told this would be a better place to ask my questions as they are of a more technical nature. Please note that even though the questions are put in a "why..."-format they are not necessarily intended as critique but express my will to fully understand why the system is built the way it is.
Here goes:
1. Why use WebForms UI Model (postback/viewstate) without implementing MVP or MVC pattern? This, to me, really is something i thought was more common a few years ago and I am a bit surprised to find it here. The rigidness of postback- and viewstate-driven models together with the inability to have good test-coverage makes it less than favorable. Care to share your thoughts on this?
2. Why no ORM- or DB-abstraction-layer? The DAL is built into the "server"-part of the application and even though I cannot say with confidence that I have grasped the DAL and the domain model completely yet, it seems that extending the database poses difficulties. I can see that you use ObjectBuilder in the serverlibraries, but perhaps it would have been beneficial for extensibility to incorporate an open object-model based ORM layer as part of the opensource part, based on a common free ORM framework like NHibernate or SubSonic. For instance we need to extend both the customer metadata from a backend financial system and the product metadata with product information from CNet. How could this be done easily with the current architecture?
3. Why don't you use any proper service-layer design patterns, like servicelocator or any DI/IOC framework? There are a bundle of prime containers and mini-frameworks out there that would make the services used more loosely coupled and configurable. It would also be much easier mocking services for unit-testing with such a layer.
4. Why use inline code in all pages instead of code-behind? Inline code in a single file is much harder to read, maintain and debug and also causes problem with intellisense and possibly other plugins and tools (resharper comes to mind). I think it is good practice to separate actual code from strictly GUI html and ever since 2.0's implementation of partial classes this would be the preferred way to manage the code. I am very curious as to why this is not done in AC?
5. Why isn't the application properly localized yet? Even though the US probably is your biggest market and where you focus your efforts, i expected a system of this magnitude to be properly localized and resource-based. This is clearly not done, and the code is littered with static texts, both in code and in UI. Mind you, that a properly resource-based application isn't beneficial only for international customers, but also simplifies maintenance of the store texts and design. I would much rather send my customer a resource-file that he can prood and update to his own desires, rather than having him take notes and making changes in the code...
Reading the forum, there have been a multitude of requests for this ever since early 2007 and the response from you back then was that is coming in the next release. We are now at 7.1 and mid-Q1 2009, and still no sign of it?
6. Quality code. Sure, I cannot say that I see and bad code anywhere, but I am a bit curious as to why the code isn't cleaned up or refactored more. The code (at least the bits of it that I am privy to) is strewn with redundant initializations, qualifiers, casts and includes. One reason for redundancy would be clarity but from what i saw, this was not the case and I would rather call it clutter. Is this just due to old code that hasn't really been tidied up lately?
7. Extensibility? Another big concern of mine is the extensibility of the system. Are there any guidelines on how to extend the base system in any pre-defined way that will ease a future upgrade of the underlying "server" and framework part? With the extensions in model and functionality I have in mind, I would be very interested in how a future upgrade to AC 8.0 (or whatever will come next that is worth an upgrade and the effort it entails) would work?
8. Performance. I've been trying to find information about performance and stability of the system (out-of-the-box and without any modifications of course). It is vital that the system perform well and is responsive even though the load might be big. Any statistics on transactions/hour, general stability/uptime etc that you can provide?
Besides these questions and thoughts i have i think AbleCommerce seem to be a very full-grown and extensive system and there are ofcourse many parts of it i like very much (otherwise i wouldn't be here asking these questions at all), but i see no point in bringing that up here as it adds nothing valuable to this discussion at this time. I'll give you praise later on, when, and if, i am done and the store is launched...

Thanks again,
/Mike