What can be more wasteful than trying to make a ant sing if the ant doesn't want to?
If Top Mind wants to explain his confussion: Can Top Mind explain what he thinks about Design Patterns? Can he explain what he thinks about the Template Method Design Pattern?
For a general coverage of my opinions on OO patterns, see Top Mind Page Anchor: "Patterns". As far as the Template Method, I would have to see a specific Use Case rather than offer a one-to-one alternative for all cases. --top
Top Mind has continually failed to see the benefits of OOP. I, for one, have grown tired of all the bickering and circle-jerk style discussions on this topic. However, I find myself thinking that perhaps we've failed. Top Mind says he primarily works in the custom business applications space. I've done my fair share of work in this arena: sometimes using OOP and others not. I don't see why I can't put together a sample and let the community, including Top Mind, scrutinize the effort.
Here's what I propose:
1 Top Mind selects a business domain:
banking, insurance, trading, transport, manufacturing, etc. Any business domain is fine with me, but if it's something I'm unfamiliar with I may have to do some research before implementation.
I will implement an example application, with sufficient detail, to demonstrate said business domain in an object oriented programming language.
3 I will use Visual Studio.NET and C# as my implementation language. I'm choosing this for two reasons:
I have the tools and C# is a language most folks here can grasp. Please, no language wars. This isn't about which language but rather general OOP concepts. I consider myself a Smalltalker but I believe C# can cover the necessary implementation details quite nicely for this scenario.
I will use Matisse as my data store. (Anyone can download a 30 day, unrestricted, evaluation). Since this is supposed to demonstrate the benefits of OOP I get to choose the persistence mechanism I believe works the best.
Once the implementation is done I will post the entire source tree, build scripts, and binaries to the web for all to download, inspect, and dissect.
Top Mind has the option to ask me to make up to three enhancements. The purpose of this is to determine a change metric.
The unit-of-measure for all code metrics will be lines of code. A line of code is a line that ends with a semi-colon ";", or begins with an opening brace "{". (This should cover just about all meaningful lines of code in a C# example).
8 Top Mind must implement a similar application to the one I'll implement, using whatever techniques he feels are appropriate. Since he's a proponent of Table Oriented Programming, I suspect we'd all like to see his version use these techniques. (Note:
I say "similar" here because I don't want to get into an endless discussion on requirements. All we need to do is agree on the problem domain and we'll each go off and do our best. If one version has features the other doesn't we will discount these features when making head-to-head comparisons.)
I'd like to stay away from web-based applications. I assume a majority of the folks here use Windows or have it available if they're interested. I don't see cross platform as one of the goals of this exercise. In addition, while I intend on having a GUI for my implementation it will be simple and sufficient, but nothing more. We won't be comparing GUI implementations at all. I intend on building a layered application with the domain logic truly independent from other aspects of the system. This should allow us to compare the domain objects with whatever comparable protocol Top Mind comes up with. I assume it will be a combination of SQL and function/procedure calls.
I disagree. Desktop GUI frameworks can end up wagging the dog and vary too much for comparison.
The benefit to the community is simple: We will have a concrete example to point to in future debates. Not only will this example demonstrate OOP in a custom business application space but it will also demonstrate that OODBMS' aren't as evil as some think. If you're not familiar with Matisse it has the capability to be both an OODBMS and an RDBMS at the same time. Matisse has both ADO.NET and ODBC drivers available. I intend on doing all reporting using Crystal Reports for .NET using the ODBC interface.
So, I put it to Top Mind. Give me a domain to work in and I'll produce an example for all to see. Whatever the results are I'll be happy. I'm going into this to see where we end up and without preconceived notions.
Let the challenge begin. -- Jeff Panici
This is the worklog for my efforts on this project. If this gets big enough I may move it to another page but for now I'll leave it here.
12-28-2003
2:09 PM CST:
-- I've begun my work on the Campus Example which I'm going to call the Bee Hive Enrollment System.
12-30-2003
2:00 PM CST:
Discuss problem domain with my local domain expert, Josh Panici. My brother is both student and teacher so I'm using him as my on-site customer. We're using a whiteboard and doing some simple UML to get things straight.
2:26 PM CST:
We've finished our initial rough cut of the problem domain. Josh is going to do some research on a few items and I'm going to start implementing the domain as-is.
2:33 PM CST:
I've finished fleshing out the project directory and checking in my initial work into SCM.
2:45 PM CST:
Flesh out of the default.build NAnt script.
2:52 PM CST:
Pull in of shared code we've already written. These are things like installers, encryption, and other tool type classes.
2:56 PM CST:
I've installed the latest version of NUnit and configured my NAnt script to run the tests during the build process.
3:11 PM CST:
Created the Matisse database initialization script and added a NAnt task to "initialize" a Matisse database instance and call mt_odl to populate the schema.
Progress update?
Top: Summer 2007: Payroll Example completed. Critique away...
See original on c2.com