<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www2.codebetter.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jeremy D. Miller -- The Shade Tree Developer - All Comments</title><link>http://www2.codebetter.com/blogs/jeremy.miller/default.aspx</link><description>Under the hood and working with .Net, TDD, Software Design, and Agile Stuff

</description><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><item><title>business income opportunity xango</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/02/10/first-causes-reversibility.aspx#180315</link><pubDate>Thu, 03 Jul 2008 23:41:58 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180315</guid><dc:creator>business income opportunity xango</dc:creator><description>&lt;p&gt;June 2007 M T W T F S S&amp;#171; May Jul&amp;#187; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Favorite Sites A Million Monkeys Typing Ace of Spades Acute Politics Alarming News Anwyn’ s Notes in the Margin Badgers Forward Beldar Blog&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180315" width="1" height="1"&gt;</description></item><item><title>re: Why do we Refactor?</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/05/15/why-do-we-refactor.aspx#180311</link><pubDate>Thu, 03 Jul 2008 22:36:15 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180311</guid><dc:creator>tree removal California</dc:creator><description>&lt;p&gt;please do care for our trees.&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180311" width="1" height="1"&gt;</description></item><item><title>re: Why do we Refactor?</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/05/15/why-do-we-refactor.aspx#180310</link><pubDate>Thu, 03 Jul 2008 22:35:08 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180310</guid><dc:creator>tree removal service</dc:creator><description>&lt;p&gt;salute for trees!&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180310" width="1" height="1"&gt;</description></item><item><title>re: Unit Testing Business Logic without Tripping Over the Database</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2005/10/12/133017.aspx#180294</link><pubDate>Thu, 03 Jul 2008 13:23:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180294</guid><dc:creator>Jeremy D. Miller</dc:creator><description>&lt;p&gt;@ejames,&lt;/p&gt;
&lt;p&gt;&amp;quot;you can unit test business logic&amp;quot; is different from &amp;quot;it's easy to unit test the business logic.&amp;quot; &amp;nbsp;I shouldn't have to mock out data access methods and all that data portal jazz just to unit test business logic at all. &amp;nbsp;It's work that I wouldn't have to do with other architectures.&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180294" width="1" height="1"&gt;</description></item><item><title>re: Unit Testing Business Logic without Tripping Over the Database</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2005/10/12/133017.aspx#180287</link><pubDate>Thu, 03 Jul 2008 10:26:53 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180287</guid><dc:creator>ejames</dc:creator><description>&lt;p&gt;Using TDD for CSLA objects is no different from TDD using using plain ordinary C# objects. &amp;nbsp;Just because CSLA uses the Active Record pattern doesn't mean you cannot use dependency injection to inject the data access code.&lt;/p&gt;
&lt;p&gt;CSLA defines four (give or take some) Methods to be overridden for data access: &amp;nbsp;Create, Fetch, Update and Delete. &amp;nbsp;The implementation of such methods is left for the business object developer, leaving the door wide open for use of data-access interfaces, dependency injection, and database isolation.&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180287" width="1" height="1"&gt;</description></item><item><title>re: First Causes in Software Development: How do I decide what is good?</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/02/05/first-causes-in-software-development-how-do-i-decide-what-is-good.aspx#180281</link><pubDate>Thu, 03 Jul 2008 08:03:28 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180281</guid><dc:creator>FransBouma</dc:creator><description>&lt;p&gt;@Fregas:&lt;/p&gt;
&lt;p&gt;Hehe :) &amp;nbsp;sorry but after reading your post, I can only conclude here that it's not me, but... you who's attacking someone as it's you who wrote &amp;quot;In fact almost every time i see a post or comment from Frans, he is coming across as aggressive, egotistical, accusatory, victimized, pushy, defensive or attacking.&amp;quot;,&lt;/p&gt;
&lt;p&gt;No offence, but I think you should look in the mirror as well, if you're going out to bash someone in public with a post like you did above. &lt;/p&gt;
&lt;p&gt;I know we did everything we could to help you out, and you know that. I'm sorry you still feel a lot of hate after all these years that you have to post a piece of text on a public blog like you did above. &lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180281" width="1" height="1"&gt;</description></item><item><title>re: Classic Technical Lead Blunder</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2005/09/23/132398.aspx#180273</link><pubDate>Thu, 03 Jul 2008 03:48:54 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180273</guid><dc:creator>Bil Simser</dc:creator><description>&lt;p&gt;@Jeremy: I'm torn on the code review comment. I frankly don't like sitting in a meeting for more than 15 minutes (our Scrum limit) and an hour (or longer) wallowing through code doesn't seem to be condusive to a healthy collaborative environment. Most of the time it's &amp;quot;this is bad&amp;quot;, &amp;quot;this needs work&amp;quot;, &amp;quot;why didn't you try this&amp;quot;. All good suggestions, but sometimes never even implemented due to cost concerns (another issue). However, with peer reviews you run the problem of the team. On a small Agile team of say 4 devs (2 senior, 2 junior paired) your gene pool quickly empties out as the senior guys are always reviewing the junior guys and you're left with 2 peoples opinion (or sometimes 1). Not sure how to resolve that and pitch the code review free zone to my client as a result of that (situation I&amp;quot;m in right now). A good discussion to have (psst, come up to Canada in August for some good ALT.NET'ing)&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180273" width="1" height="1"&gt;</description></item><item><title>re: Let's see, if I...</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/07/01/let-s-see-if-i.aspx#180246</link><pubDate>Wed, 02 Jul 2008 14:46:37 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180246</guid><dc:creator>Jeremy D. Miller</dc:creator><description>&lt;p&gt;@John,&lt;/p&gt;
&lt;p&gt;Nice comment. &amp;nbsp;However, if you aren't smart/experienced enough to cut through the garbage on Google, you certainly aren't going to do any better writing your own stuff.&lt;/p&gt;
&lt;p&gt;@Kent,&lt;/p&gt;
&lt;p&gt;&amp;quot;I think what Jeremy's getting at (and I apologize for putting words in your mouth, Jeremy) is that if there is a business problem to be solved, we should be *avoiding* solving technical problems, especially when they've already been solved well.&amp;quot;&lt;/p&gt;
&lt;p&gt;Ditto from me, with the proviso that yes, sometimes you can come with an innovative way to do it better.&lt;/p&gt;
&lt;p&gt;@Kyle,&lt;/p&gt;
&lt;p&gt;Welcome to the world of a professional software developer.&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180246" width="1" height="1"&gt;</description></item><item><title>re: Working faster and fewer mapping errors with NHibernate</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/06/18/working-faster-and-fewer-mapping-errors-with-nhibernate.aspx#180244</link><pubDate>Wed, 02 Jul 2008 14:24:32 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180244</guid><dc:creator>Colin Jack</dc:creator><description>&lt;p&gt;@Sheraz&lt;/p&gt;
&lt;p&gt;We do that too, sometimes they are also overkill (also coveed in the book). Even if you do use a factory its quite nice to see absolutely required (and unchanging) dependencies on the constructor.&lt;/p&gt;
&lt;p&gt;For example an Account may need to be told what kind of Account it is by being passed an AccountKind (assuming thats the design we have). We could use a factory, but we may choose to pass that value to the constructor as its not ever valid for it to be null or for it to change.&lt;/p&gt;
&lt;p&gt;Also one question mark does the job :)&lt;/p&gt;
&lt;p&gt;@Jeremy&lt;/p&gt;
&lt;p&gt;Tried using ObjectFactory.AssertConfigurationIsValid() when I knew I had invalid mappings. It did indeed cause an exception to be thrown:&lt;/p&gt;
&lt;p&gt;&amp;quot;No Default Instance defined for PluginFamily...&amp;quot;&lt;/p&gt;
&lt;p&gt;Unfortunatley after travelling through 3 other catch blocks it got to a catch blow ValidationBuildSession which appeared to swallow the exception, the code carried on and in the next iteration of a foreach in PipelineGraph.Visits you get an InvalidOperationException because &amp;quot;Collection was modified; enumeration operation may not execute.&amp;quot;&lt;/p&gt;
&lt;p&gt;We're using 2.5 (downloaded from SVN this morning) and although this doesn't really matter I thought I should report it.&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180244" width="1" height="1"&gt;</description></item><item><title>re: Let's see, if I...</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/07/01/let-s-see-if-i.aspx#180241</link><pubDate>Wed, 02 Jul 2008 13:46:31 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180241</guid><dc:creator>Kyle Szklenski</dc:creator><description>&lt;p&gt;What bothers me is when someone writes an application and starts it off as godawful complex, without even trying to do something simpler.&lt;/p&gt;
&lt;p&gt;An example would be a co-irker of mine wrote an application for which there are multiple different hardware types to be abstracted. He wrote a single base class, to which he adds all the functionality of a new piece of hardware to whenever that hardware is added. In most cases, 50-90% of the interface is dead code/degenerate functions. What I realized is that, the way it's set up, it's much simpler to use the command pattern and that's that. How is it that a relative nublet programmer (me - 1.5 years experience) came up with this significantly simplified version of the base class interface (no specific functions, just the one called Send(ICommand command)!), when a person with 15+ years of experience was completely blind to it? As a friend of mine said, &amp;quot;Welcome to the real world.&amp;quot;&lt;/p&gt;
&lt;p&gt;The fact is, the author of said class didn't look for anything simpler. He made it ridiculously complex from the start, and now when someone else has to add a new piece of hardware to the top, that person is left in a coma - because their brain shut down when they saw how it was &amp;quot;designed&amp;quot;!&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180241" width="1" height="1"&gt;</description></item><item><title>re: Let's see, if I...</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/07/01/let-s-see-if-i.aspx#180240</link><pubDate>Wed, 02 Jul 2008 13:16:40 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180240</guid><dc:creator>Bil Simser</dc:creator><description>&lt;p&gt;Heh. &amp;quot;co-irkers&amp;quot;. A typo or...&lt;/p&gt;
&lt;p&gt;And just ask Oren, he would have written the solution for you in 8 lines.&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180240" width="1" height="1"&gt;</description></item><item><title>re: Let's see, if I...</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/07/01/let-s-see-if-i.aspx#180227</link><pubDate>Wed, 02 Jul 2008 12:07:30 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180227</guid><dc:creator>Kent Boogaart</dc:creator><description>&lt;p&gt;@Josh&lt;/p&gt;
&lt;p&gt;I, too, have side projects that are aimed more at providing framework/utility code. I don't see a problem with this: it's a project dedicated to solve a particular problem, and that problem just happens to be technical rather than a business problem.&lt;/p&gt;
&lt;p&gt;I think what Jeremy's getting at (and I apologize for putting words in your mouth, Jeremy) is that if there is a business problem to be solved, we should be *avoiding* solving technical problems, especially when they've already been solved well.&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180227" width="1" height="1"&gt;</description></item><item><title>re: Let's see, if I...</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/07/01/let-s-see-if-i.aspx#180226</link><pubDate>Wed, 02 Jul 2008 12:03:12 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180226</guid><dc:creator>Kent Boogaart</dc:creator><description>&lt;p&gt;I think you're touching on a bigger problem: developers *want* to develop technical solutions, not business ones. They'll often jump at the half-chance to develop a new logging infrastructure or utility layer of some sort to the detriment of actually producing something with business value.&lt;/p&gt;
&lt;p&gt;I'm not so sure it's entirely out of ignorance of what's out there, it's often more a case of 'I can do better' and 'working on X utility code is more interesting than working on Y business code'.&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180226" width="1" height="1"&gt;</description></item><item><title>re: Let's see, if I...</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/07/01/let-s-see-if-i.aspx#180198</link><pubDate>Wed, 02 Jul 2008 01:50:17 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180198</guid><dc:creator>John O'Brien</dc:creator><description>&lt;p&gt;Warning.... using google can be like looking through a garbage heap for something edible. There are a lot of experienced people out there share good things. &lt;/p&gt;
&lt;p&gt;But there are lot more people who spend more time blogging than actually &amp;quot;eating their own dogfood&amp;quot;.&lt;/p&gt;
&lt;p&gt;Another warning... Don't be a CoPaster &lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://www.obrienjd.com/post/2008/03/The-copypaste-generation-"&gt;www.obrienjd.com/.../The-copypaste-generation-&lt;/a&gt;(CoPasters).aspx&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180198" width="1" height="1"&gt;</description></item><item><title>re: Before you use an IoC tool, some concepts to know first</title><link>http://www2.codebetter.com/blogs/jeremy.miller/archive/2008/06/29/some-concepts-to-know-first.aspx#180191</link><pubDate>Tue, 01 Jul 2008 23:36:59 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180191</guid><dc:creator>Frank</dc:creator><description>&lt;p&gt;@Jeremy:&lt;/p&gt;
&lt;p&gt;I was just attempting to make the point that cohesion and interclass dependency are orthogonal concepts. A cohesive class may or may not have dependencies on other classes. The same is true for a noncohesive class.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;Frank&lt;/p&gt;
&lt;img src="http://www2.codebetter.com/aggbug.aspx?PostID=180191" width="1" height="1"&gt;</description></item></channel></rss>