<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blog.magenic.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Designing Out Loud in the .NET Space</title><subtitle type="html">Stream of consciousness about software design and unit testing (assuming that there is any real difference between the two).</subtitle><id>http://blog.magenic.com/blogs/jons/atom.aspx</id><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blog.magenic.com/blogs/jons/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.60809.935">Community Server</generator><updated>2008-01-25T18:16:36Z</updated><entry><title>Lost in the Thicket of Syntax</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/06/06/Lost-in-the-Thicket-of-Syntax.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/06/06/Lost-in-the-Thicket-of-Syntax.aspx</id><published>2008-06-06T13:46:58Z</published><updated>2008-06-06T13:46:58Z</updated><content type="html">Parsing SQL syntax is hard, especially if you do not know what you are doing.&amp;#160; A major part of creating my in-memory database to support unit testing (see here and here and here ) is parsing the SQL commands.&amp;#160; I have written code to parse text many times, but always in the context of a relatively simple string input using regular expressions.&amp;#160; This time the syntax space is much larger and I am stretching to be able to handle it.&amp;#160; As I am digging into this area, there are a number...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/06/06/Lost-in-the-Thicket-of-Syntax.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=4512" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>In-Memory Database: Waypoint #2</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/05/13/In_2D00_Memory-Database_3A00_-Waypoint-_2300_2.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/05/13/In_2D00_Memory-Database_3A00_-Waypoint-_2300_2.aspx</id><published>2008-05-13T13:33:58Z</published><updated>2008-05-13T13:33:58Z</updated><content type="html">Previously, on In-Memory Database, I talked about building something new that is derived from the SharpHSQL and SQLite code bases.&amp;#160; I have made some progress. Architecture I have made a couple of architectural decisions: First , The database must support a base plus difference structure.&amp;#160; What I mean by is is that I want to be able to create a base in-memory database with tables and views, wired together with referential integrity links, and populated with data.&amp;#160; Once created, this...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/05/13/In_2D00_Memory-Database_3A00_-Waypoint-_2300_2.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=4205" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>ORM with NHibernate</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/05/12/ORM-with-NHibernate.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/05/12/ORM-with-NHibernate.aspx</id><published>2008-05-12T15:33:33Z</published><updated>2008-05-12T15:33:33Z</updated><content type="html">In this post I am going to refer to the code and Power Point slides that I used at the Code Camp.&amp;#160; You do not need to have these materials but it might help. Just to refresh our memories, an ORM maps data between the application domain model objects and the relational database schema.&amp;#160; The domain model objects and the database schema are (or should be) pretty commonplace concepts.&amp;#160; The only wildcard is how to specify the mapping.&amp;#160; This post will cover the several mechanisms that...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/05/12/ORM-with-NHibernate.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=4182" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>Life</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/05/12/Life.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/05/12/Life.aspx</id><published>2008-05-12T13:35:22Z</published><updated>2008-05-12T13:35:22Z</updated><content type="html">Life is what happens as we are planning other things. If You Want to Make God Laugh, Tell Him Your Plans....(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/05/12/Life.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=4180" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>ORM: Prelude to Greatness: the Requirements for Mapping</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/05/02/ORM_3A00_-Prelude-to-Greatness_3A00_-the-Requirements-for-Mapping.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/05/02/ORM_3A00_-Prelude-to-Greatness_3A00_-the-Requirements-for-Mapping.aspx</id><published>2008-05-02T19:51:18Z</published><updated>2008-05-02T19:51:18Z</updated><content type="html">All of these solution approaches involve mapping between the application view and the database view. The problem with each of these approaches is that the mapping is defined within the application or the database. What we want is a solution that is outside of the application and outside of the database. We want the application to expose the meta-data about its structure and for the database to do the same thing. With modern languages and databases, this is a very easy thing to do. With all of this...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/05/02/ORM_3A00_-Prelude-to-Greatness_3A00_-the-Requirements-for-Mapping.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3941" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>In-Memory Database: Waypoint #1</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/05/01/In_2D00_Memory-Database_3A00_-Waypoint-_2300_1.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/05/01/In_2D00_Memory-Database_3A00_-Waypoint-_2300_1.aspx</id><published>2008-05-01T14:09:26Z</published><updated>2008-05-01T14:09:26Z</updated><content type="html">I have narrowed my search for an&amp;#160; in-memory database to support unit testing down to SQLite ( here and here ) and SharpHSQL ( here and here ).&amp;#160; Both are open-source implementations of in-memory SQL databases.&amp;#160; SQLite is written in mostly C# (there is a smattering of straight C code) and SharpHSQL is written in 100% C#.&amp;#160; Both have some tweaks to handle the Pocket PC environment.&amp;#160; Both have the ability to save the contents of the in-memory database to disk and retrieve it later.&amp;#160;...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/05/01/In_2D00_Memory-Database_3A00_-Waypoint-_2300_1.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3928" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>ORM: The Gray Zone Revisited</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/05/01/ORM_3A00_-The-Gray-Zone-Revisited.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/05/01/ORM_3A00_-The-Gray-Zone-Revisited.aspx</id><published>2008-05-01T12:59:22Z</published><updated>2008-05-01T12:59:22Z</updated><content type="html">A key message in the previous ORM posts is that application point of view and the database point of view are both valid.&amp;#160; What we have to do is to create an environment in which the application domain modelers to do their work at the same time that the database administrator do their work without causing or even tolerating warfare. There is a &amp;quot;term of art&amp;quot; in the software world called &amp;quot;separation of concerns&amp;quot;. What this means is for the topic at hand is that, to the greatest...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/05/01/ORM_3A00_-The-Gray-Zone-Revisited.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3926" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>In Search of An In-Memory Database</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/04/30/In-Search-of-An-In_2D00_Memory-Database.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/04/30/In-Search-of-An-In_2D00_Memory-Database.aspx</id><published>2008-04-30T19:14:13Z</published><updated>2008-04-30T19:14:13Z</updated><content type="html">As part of the podcast I did a few weeks ago (and that was released to the wild this last Monday), I talked about doing unit tests with an in-memory database.&amp;#160; I have a few cycles available and I thought that I would poke around and see what was available.&amp;#160; As I was poking, I was making some mental notes about what I wanted to do with this functionality.&amp;#160; Since my mind is not a reliable storage unit, I wanted to write them down.&amp;#160; So here I am. Unit Testing My interest is in unit...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/04/30/In-Search-of-An-In_2D00_Memory-Database.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3917" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>ORM: The Database Point of View</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/04/30/ORM_3A00_-The-Database-Point-of-View.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/04/30/ORM_3A00_-The-Database-Point-of-View.aspx</id><published>2008-04-30T13:32:04Z</published><updated>2008-04-30T13:32:04Z</updated><content type="html">In my experience, almost all non-demo databases contain data that is associated with multiple domain models. It may be the case that the database starts out in a one-to-one relationship to a domain model (that is, the database was created originally to support the application). That will not last. If the data in that database is valuable, it spawns other domain models in pretty short order. Someone wants a report (or several reports). Someone else wants some analysis statistics. Another organization...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/04/30/ORM_3A00_-The-Database-Point-of-View.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3909" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>ORM: The Application Point of View</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/04/29/The-Application-Point-of-View.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/04/29/The-Application-Point-of-View.aspx</id><published>2008-04-29T19:28:52Z</published><updated>2008-04-29T19:28:52Z</updated><content type="html">Ideally, the application point of view is the point of view of the users who will use the application to advance the interests of the organization. While the application must be computationally competent (more on that in a minute), the structure of the application should be guided much more by what the organization needs than by what the technologists are comfortable with. There is a school of thought that suggests that one can define the application in a way that is completely independent of the...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/04/29/The-Application-Point-of-View.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3841" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>Object Relational Mapping (ORM): Welcome to the Gray Zone</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/04/29/Object-Relational-Mapping-_2800_ORM_29003A00_-Welcome-to-the-Gray-Zone.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/04/29/Object-Relational-Mapping-_2800_ORM_29003A00_-Welcome-to-the-Gray-Zone.aspx</id><published>2008-04-29T19:02:27Z</published><updated>2008-04-29T19:02:27Z</updated><content type="html">This is the first of a series of blog posts about Object Relational Mapping (or ORM). It is an attempt to capture some of the notions in the presentation that I did at the latest Twins Cities Code Camp. The &amp;quot;Gray Zone&amp;quot; is a reference to approach that rejects the notion that the world is black and white; that only one point of view matters (which not so coincidently is my point of view and if you are not with me, you must be against me) . As you can see I have been watching way too much...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/04/29/Object-Relational-Mapping-_2800_ORM_29003A00_-Welcome-to-the-Gray-Zone.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3840" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>ORM Podcast</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/04/28/ORM-Podcast.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/04/28/ORM-Podcast.aspx</id><published>2008-04-28T16:53:15Z</published><updated>2008-04-28T16:53:15Z</updated><content type="html">As a result of my Spring 2008 Code Camp talk on ORM, I got a chance to sit down with Microsoft Evangelist, Jeff Brand, to chat about ORM.&amp;#160; You can listen at http://www.slickthought.net/post/New-Spaghetti-Code-Podcast-Available---Jon-Stonecash-on-ORM.aspx .&amp;#160; This is a audio-only podcast and as a consequence it tends to be a bit more philosophical.&amp;#160; Go there right now and listen.&amp;#160; You will be a better person for it.&amp;#160; (I promised Jeff that I would say that on my blog.)...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/04/28/ORM-Podcast.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3819" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>The PowerPoint Deck for the ORM Talk</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/04/28/The-PowerPoint-Deck-for-the-ORM-Talk.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="61120" href="http://blog.magenic.com/blogs/jons/attachment/3818.ashx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/04/28/The-PowerPoint-Deck-for-the-ORM-Talk.aspx</id><published>2008-04-28T16:36:00Z</published><updated>2008-04-28T16:36:00Z</updated><content type="html">The attachment contains a zipped PowerPoint 2003 deck that I used for the talk. As I noted, I am working on a blog post to expand the contents. Coming soon....(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/04/28/The-PowerPoint-Deck-for-the-ORM-Talk.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3818" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry><entry><title>2008 Spring Code Camp</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/04/28/2008-Spring-Code-Camp.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="416984" href="http://blog.magenic.com/blogs/jons/attachment/3817.ashx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/04/28/2008-Spring-Code-Camp.aspx</id><published>2008-04-28T16:21:00Z</published><updated>2008-04-28T16:21:00Z</updated><content type="html">Here is the code from the Spring, 2008 Code Camp. I am a little late on this. I fell into a &amp;quot;rabbit hole&amp;quot; while cleaning up the code to be posted here. At my age, I should know better: just ship it, you can &amp;quot;improve&amp;quot; it later. You can find the zip file containing the VS2008 solution as an attachment to this post. There are a couple of items of note: There is ORMDataBase project in the solution. This contains two scripts that are needed to build and populate the sample database...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/04/28/2008-Spring-Code-Camp.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=3817" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author><category term="CSLA" scheme="http://blog.magenic.com/blogs/jons/archive/tags/CSLA/default.aspx" /><category term="NHiberate" scheme="http://blog.magenic.com/blogs/jons/archive/tags/NHiberate/default.aspx" /><category term="ORM" scheme="http://blog.magenic.com/blogs/jons/archive/tags/ORM/default.aspx" /></entry><entry><title>In the Course of Machine Events</title><link rel="alternate" type="text/html" href="http://blog.magenic.com/blogs/jons/archive/2008/01/25/In-the-Course-of-Machine-Events.aspx" /><id>http://blog.magenic.com/blogs/jons/archive/2008/01/25/In-the-Course-of-Machine-Events.aspx</id><published>2008-01-25T22:16:36Z</published><updated>2008-01-25T22:16:36Z</updated><content type="html">The final technique for extending machine-generated code is to use events. Events are essentially a special form of delegates. When an event is raised, the event process invokes any delegates that have been attached to the event. Each of these delegates must have a specific method signature. At the appropriate points in the life-cycle, the machine-generated code invokes an extension event. Because event-handler delegates cannot return values to the code that invoke them, the machine-generated code...(&lt;a href="http://blog.magenic.com/blogs/jons/archive/2008/01/25/In-the-Course-of-Machine-Events.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blog.magenic.com/aggbug.aspx?PostID=1854" width="1" height="1"&gt;</content><author><name>jons</name><uri>http://blog.magenic.com/members/jons.aspx</uri></author></entry></feed>