Query Builder: Part I: Introduction

Hello,

My name is Jonas Schreiber and I’m starting a blog here to document my progress creating a managed query builder that allows folks to create the business logic for a program without knowing how to code. I’ll skip the “it’s my first blog, so pardon the…” stuff for now.

The Challenge

For a concrete example, imagine the set of rules and actions you must keep in mind while driving on a highway. There are a number of criteria you must consider, and act upon. Your brain does this naturally, because it has been trained to. Training a program how to (insert verb here)  boils down to defining the rules, and the actions.

Often in legacy systems, this is done in the code, with access only available to those with the source code. I’d like to create some transparency to the business logic for our support folks and our customers at my company. My application isn’t going to be driving down the road at any point, but that’s irrelevant. If things go as planned, the software could be repurposed for this use-case.

Predictions

This is an exploration by me, will likely see some sacrifices along the way, and may not even come to fruition. The end goal is a drag-and-drop interface for defining the rules, and a Java application that will consume and act upon the rules. The interface should look something like this:

Query Builder

Outline

I’ll be breaking this into four parts:

  1. Introduction
  2. The Data Model (MySQL)
  3. The Front End (PHP/JavaScript/jQuery/AJAX)
  4. The Back End (Java)

This may expand as the project unfolds, but I’ll try to stick to it. Check back for further updates next weekend, and thanks for checking out my first post!

Hindsight

EDIT: Pretty funny to look back on this three months later. It did not evolve to look like that, but it did come to fruition 🙂 More interesting were the back end issues with persistence and the adjacency list model I used. See more in part 2.


Posted

in

, ,

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *