The Top Challenge

What can be more wasteful than trying to make a ant sing if the ant doesn't want to?

If TopMind wants to explain his confussion: Can TopMind explain what he thinks about DesignPatterns? Can he explain what he thinks about the TemplateMethod DesignPattern?

For a general coverage of my opinions on OO patterns, see TopMind PageAnchor: "Patterns". As far as the TemplateMethod, I would have to see a specific UseCase rather than offer a one-to-one alternative for all cases. --top

TopMind 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. TopMind 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 TopMind, scrutinize the effort.

Here's what I propose:

  1. TopMind 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.

  2. 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.

  4. 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.

  5. 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.

  6. TopMind has the option to ask me to make up to three enhancements. The purpose of this is to determine a change metric.

  7. 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. TopMind must implement a similar application to the one I'll implement, using whatever techniques he feels are appropriate. Since he's a proponent of TableOrientedProgramming, 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.)

  9. 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 TopMind 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 TopMind. 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. -- JeffPanici

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.


2:09 PM CST
-- I've begun my work on the CampusExample which I'm going to call the BeeHive Enrollment System.
2:00 PM CST
Discuss problem domain with my local domain expert, JoshPanici?. 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 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: PayrollExample completed. Critique away...

See also: TheTopChallengeDiscussion, ChallengeSixVersusFpDiscussion

EditText of this page (last edited March 28, 2008) or FindPage with title or text search