Friday, April 08, 2005

Pragmatic Labs is pleased to announce its second product offering tentatively code named "Prometheus"

Simply stated; Prometheus is a code generation tool for .NET applications.  However, Prometheus goes a step further then most generation tools.  Most code generation tools are tier specific, meaning that they target one tier of the application.  The most common example of this is the data access layer generator.  Generators of this type usually read a database schema and generate code for CRUD operations on the database

Prometheus is a step beyond the single tier generators.  Prometheus allows an application to be defined in a tier independent schema file using XML.  From this schema Prometheus generates the database creation script, stored procedures, the data access layer, the business logic layer and the user interface.  The reason this works is there are certain common patterns that emerge when building applications.  Harnessing the experience of developers and the distilled knowledge of design patterns, a rather full skeleton of an application can be generated very rapidly. 

 Prometheus allows for code extensibility with either inheritance or region directives.  No matter how good a code generator is there is still a need for manual coding to handle business logic and special case situations.  Prometheus seeks to coexist with manual code and provides a clear separation between generated and manual coding.

 Prometheus is currently scheduled for release in the fall of 2005.

 

Friday, April 08, 2005 8:08:34 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Friday, April 01, 2005

I found a way to “bind” objects to a web user control so that you don’t have to do this:

   Address a = new Address(….);

   This.txtLine1.Text = a.Line1;
   This.txtLine2.Text = a.Line2;

          
Instead you can just do this:
       

   UserControl.LoadData(a);

Then in the user control you have this:

   Public void LoadData(Address a) 
   {
      FormBinding.BindObjectToControls(a,this);
   }

You can also retrieve the fields once the user has made changes:
 
   FormBinding.BindControlstoObject(a,this);

 
It uses reflection.  It requires that the controls on the form be named the same as the properties of your object.  This actually makes the system very easy to read since your object properties, database fields, stored procedure variables and controls all have the same names. 
 
Here is the original source.

I’ve used this in two separate projects and it has worked very well.  If you combine it with code generation then you really realize some definite time savings with little (if any) performance penalty.  See the link for the article for more info.


Friday, April 01, 2005 9:01:09 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Tuesday, March 29, 2005

In reference to this previous post, which was inspired by a java patterns book, Holub on Patterns: Learning Design Patterns by Looking at Code, I was again looking for the grail. 

Holub uses a builder pattern approach to avoid exposing each private field through a getter and setter.  This approach is interesting but it quickly becomes complicated in the implementation as a series of interfaces and implementations become necessary and this leaves the casual observer wondering if the getter/setter method might be much simpler to understand.

Holub's assertion is that accessors are used mostly for visual designer created UI's.  This may be true to a large extent but the alternative seems pretty convoluted.  Holub also argues that accessors are very procedural which may also be true and that object oriented progroms become procedural at the margins where they must communicate with procedural systems like UI and database access.  However, in the OO middle the program should be objects which consist of an almost service stack like service object which provides methods in which to accomplish tasks (isn't this procedural?).

Conclusion:  I have headed the warning of not to go crazy with accessors and mutators but the alternatives don't have a good smell. 

Tuesday, March 29, 2005 10:45:24 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Monday, March 28, 2005
An article on OO design and CASE tools versus CRC cards and hand drawn diagrams.

I would have to agree that many times the tool causes such a disconnect from the model that it is more trouble then it is worth.  There is some fundamental mind-body link that causes the mind to be stimulated by drawing and writing. 

This is why the CRC cards, a white board and a digital camera are essentials for the SDK.
Monday, March 28, 2005 4:53:30 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
I am in the process of putting together my own SDK (Software Development Kit).  No this is not a 50 Meg download from my site but rather a portable software development toolbox that I can take on the road.
fLogViewer
Category Name URL
Text Editor

Crimson Editor

PSPad

Notepad++

Metapad

http://www.crimsoneditor.com/

www.pspad.com/

http://notepad-plus.sourceforge.net/uk/site.htm

http://www.liquidninja.com/metapad/

Source Control Subversion http://subversion.tigris.org/
Source Control Subversion Windows Shell Extension http://tortoisesvn.tigris.org/
Web Browser Firefox http://www.mozilla.org/products/firefox/
Design CRC Cards http://c2.com/cgi/wiki?CrcCard
Code Generation Code Smith http://www.ericjsmith.net/codesmith/
Archiving 7-Zip http://www.7-zip.org/
Various Excel http://office.microsoft.com/en-us/default.aspx
ftp/sftp FileZilla http://filezilla.sourceforge.net/
html/xml formatting HTML Tidy http://tidy.sourceforge.net/
Clipboard Manager CLCL http://www.nakka.com/soft/clcl/index_eng.html
Shortcut Manager

Winkey

QLiner Hotkeys

PC World

http://www.qliner.com/hotkeys/

Log File Viewer fLogViewer fLogViewer
Desktop Search Copernic http://www.copernic.com/en/products/desktop-search/
Monday, March 28, 2005 3:55:44 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Sunday, March 27, 2005

Referring to a previous post, I have been looking at the ways a business object can be represented or accessed through various tiers.  Of the ways this may be done is using the builder pattern. 

The builder pattern leaves the the representation of an object open-ended meaning that an object can have many different representations.  However, we do not need to know all of the representation at the time of construction.  Additional representations of the object can be added later. 

I have seen this pattern used extensively in java and I am actively searching for examples in C#.  Java seems to be a very pattern rich language and often strikes me as an academic language.  More on this in another post.

Sunday, March 27, 2005 8:02:43 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, March 24, 2005

Should the code in an object span multiple tiers?  For example, should the object encapsulate the data persistence, the business logic and user interface layers?

Or should there be multiple objects to represent the object in each tier?

 

Thursday, March 24, 2005 4:37:04 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
From Holub on Patterns:

The prime directive of OO systems is as follows:

    Never ask an object for information that you need to do something; rather, ask the object that has the information to do         the work for     you.

Ken Arnold says, "Ask for help, not for information."

  • Objects are defined by "contract." They don't violate their contract.

  • All data is private. Period. (This rule applies to all implementation details, not just the data.)

  • It must be possible to make any change to the way an object is implemented, no matter how significant that change, by modifying the single class that defines that object.

  • "Get" and "set" functions are evil when used blindly (when they're just elaborate ways to make the data public). I've a lot more to say on this issue later in the "Getters and Setters Are Evil" section.


 

Thursday, March 24, 2005 2:24:25 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Wednesday, March 23, 2005
Welcome to the newly created blog section of Pragmatic Labs.  This is mostly for the journal of Pragmatic Labs chief engineer; Chris Weber.  This is my thought workspace, a place to list links, research and follow up items.
Wednesday, March 23, 2005 10:19:22 PM (Central Standard Time, UTC-06:00)  #    Comments [0]