Clean Code - The Pragmatic Approach

As I mentioned in my previous post, I am currently reading Clean Code by Robert “Uncle Bob” Martin. It’s a great book!

However, having a 200-page book with rules on coding can become overwhelming, especially when trying to adopt these practices within a team.

A while back, we discussed an essay by Jeff Bay called “Object Calisthenics” extensively in the Microsoft community at Avega. This essay offers a very pragmatic approach with 9 rules on how to code.

You can find a PDF version of the rules.

I found that many of the principles Uncle Bob discusses in Clean Code are naturally followed if you adhere to the rules in Object Calisthenics.

I’ll try this approach out sometime. It does seem like a bit of a tough pill to swallow when you look at the list, though.

Read More

Last Day - New Chapter

I have come to a fork in the road of my life (that almost sounds like a poem :)).

Today is my last day on this assignment, where I’ve learned a lot. This time, I’ve delved into SOA, WCF, TFS, AOP, and build scripts, along with SCRUM.

The SCRUM part of this experience was almost a religious one. I feel like a different and better consultant after learning SCRUM, and I don’t think I’ll ever go back.

The future holds six months with Albert and Elin. I will be “daddy-free” (a direct translation of “pappaledig” for all you Swedish readers). This is a wonderful benefit in Sweden where you actually receive money from the government to stay home with your kids. Amazing!

Elin is working nights right now, which means she has a lot of free time during the day. This allows us to spend...

Read More

Create Text File on the Fly in Build Scripts

Yesterday, we made a final touch to our build script (by “we” I mean “I talked about it for five minutes, Christer did it”).

We needed to create a .bat file that installs our database for a specific version and environment. The necessary information is only known at runtime in the build script.

I remembered there was an MSBuild community task for this purpose, and Christer found the task WriteLinesToFile. He then wrote the following target to create the .bat file:

<ItemGroup> <CmdLine Include="@ECHO OFF"/> <CmdLine Include="ECHO About to install version $(BuildVersion) on environment $(DeployEnv)"/> <CmdLine Include="SET /p passw=Enter DB password for $(DeployEnv): "/> <CmdLine Include="CALL main.bat $(DeployEnv) . $(BuildVersion) %passw%"/> <CmdLine Include="PAUSE"/> </ItemGroup> <WriteLinesToFile File=

      Read More
    

NMock2 RemotingException ByRef value type parameter cannot be null

OK this might be the most misleading error message I’ve seen. I cannot decide on how to describe it… What this means… or what this try to … Actually this happens when one of your mocked objects is mocking a method that returns something and your mocking doesn’t return anything. Eeeh - that was quite tricky.

Got it? Here is an example:

When I mock this method:

Public Class FacadeObject       Function CreateSomeThing(ByVal aName As String) As Long      End Function End Class 

by using the following code to do the mock

Expect.Once.On(m_mockadFacadeObject).Method("CreateSomeThing") 

an exception of RemotingException (ByRef value type parameter cannot...

Read More

Update AppSettings with XmlUpdate in Build Scripts

I know I will chase this one forever if I don’t put it up here…

We encountered a situation where we needed to tweak the AppSettings section of a configuration before running tests in the build script.

Luckily, there is a solution available. With the XmlUpdate task (from the MSBuild Community Tasks), you can accomplish this—if you know how to write the XPath query.

Here’s how to use it (I found this example here):

<XmlUpdate
    Namespace="http://schemas.microsoft.com/.NetConfiguration/v2.0"
    XmlFileName="$(SourceDir)\Core\ABSuite\ABClient\App.config"
    Xpath="//configuration/appSettings/add[@key='Main.ConnectionString']/@value"
    Value="$(DatabaseConnectionString)" />

Additionally, if you need to brush up on your XPath skills, check out this XPath tutorial for some great examples.

Read More

Custom Tool Warning Cannot Import wsdl portType

I chased this bug for a while and got increasingly frustrated. Here’s what happened: I updated a WCF Service Reference and encountered the error (or actually a warning) in the Error List of Visual Studio. Additionally, the Reference.vb file was completely empty.

After some experimentation and frustration (why do I always try things myself before searching for a solution?), I decided to look online. Fortunately, I found the answer quickly.

Travis Spencer’s blog provided a solution. Although the title and description of the post were quite different, the solution was what I needed.

In the “Configure Service Reference” dialog box, there is an option called “Reuse types in referenced assemblies.” This option is a bit vague in its purpose—essentially, it means the tool attempts to download the assemblies that the service is referencing.

To solve the issue, you don’t need to fully understand this setting. Simply uncheck...

Read More

WCF with Handcrafted WSDL Generated No FaultExceptions

This problem has haunted us for the good part of the autumn and winter.

Early on in our design process, we chose to create the WSDL for our services by hand. This decision was mainly due to the need to express details in XSD that WCF attributes don’t support, such as string length.

We were also using the ErrorHandlerAttribute from the excellent book “Programming WCF Services” by Juval Löwy.

What we observed was that, even though we had created the WSDL for handling faults and their details correctly, we didn’t get the fault details over to the client (i.e., the T of FaultException<T>). We checked the WSDL and the generated client proxy (and its WSDL) file over and over, line by line, but just couldn’t find the issue.

Finally, it dawned on us… It was Mr. Löwy’s fault. Seriously, it was the use...

Read More