Thomas Krantz
Sep 7, 2009
  2719
(0 votes)

EPiCodeSmells

My thoughts on some code smells I’ve come across. These three are the ones that tend to turn my stomach the most.

Here goes..

Class properties for easy access to MainBody, MainIntro etc.

I often see a bunch of these duplicated in all templates, often disguised in a “#region Properties”, an obvious hint that I am in for a treat..

        public string MainBody 
        { 
            get 
            { 
                if(IsValue("MainBody")) 
                    return (string) CurrentPage["MainBody"]; 

                return String.Empty; 
            } 
        }
I have even seen code snippets in Visual Studio being used to generate these. This indicates the lack of sensible base classes. And if you want strongly typed Episerver properties, there are better ways.

Hardcoded ids in Web.config

When poking around a new project, one of the first things I generally do, is open up Web.config. I scroll down to the appSettings-element, and if I find 10+ custom keys, I can smell the lack of Admin tabs and/or Settings page.

Usually goes something like:

    <add key="ContactFormPage" value="12312" />
    <add key="ContactFormPageEN" value="54312" />
    <add key="ProductModulePageTypeId" value="93" />
    <add key="ModuleContactPageTypeId" value="38,39" />
    <add key="ModulePageTypeId" value="3" />
    <add key="MyCoolPageTypeId" value="42" />
    <add key="CalendarEventPageType" value="11" />
    <add key="DivisionStartPageTypeId" value="46" />
    <add key="404PageId" value="78781" />
    <add key="FileNotFoundPageId" value="12333"/>
    <add key="GenericErrorPageId" value="543"/>

Episerver comes with a “Pagetype” property type. Use it.

The Utils-class

Everyone got them. At least some version of it, duplicated from one project to another, tweaked and refactored along the way. It usually contains the all familiar StripHtml(), Ellipse(), PreviewText(), MyGetPropertyWithFallbackValue().

Not really a smell perhaps, but I sort it into the DRY category.

Thoughts anyone? I am sure you have experienced your fair share of smells, perhaps worse than mine…?

Sep 07, 2009

Comments

Steve Celius
Steve Celius Sep 21, 2010 10:32 AM

I was worried you had found some smelly bits on EPiCode (http://www.coderesort.com/p/epicode). :-)

As for smelly code in general, I think I have seen more than is healthy. I guess it comes with the territory, as many web devs don't think about architecture, code quality and reusability. Getting the job done quickly is first priority.

Also, many newbies start with web development (and EPiServer), and are more concerned about why the html designer in Visual Studio does not work as well as shown on stage at the last Microsoft gig they attended. Not hardcoding page id's :-)

Thomas Krantz
Thomas Krantz Sep 21, 2010 10:32 AM

Yes wasn't it a witty headline? ;-)

Well many times it doesn't matter if the web dev thinks about quality and architecture, the project manager who rules the world doesn't care about things like that.

Please login to comment.
Latest blogs
Commerce 15 and CMS 13: Optimizely’s Next Step Toward AI-Powered, Graph-First Commerce

Optimizely is preparing to release Commerce 15 in mid-May 2026 , positioning this as a foundational shift—not just an upgrade. The direction is...

Augusto Davalos | May 7, 2026

The future of Content: Introducing Optimizely CMS 13

Optimizely In the rapidly evolving landscape of digital experience, the "monolithic vs. headless" debate is being replaced by a more sophisticated...

Aniket | May 6, 2026

Hide built in scheduled job from the admin UI

Ok so this probably goes into the not so useful section but late last night I got a veery strong feeling that all projects I am  involved with have...

Per Nergård (MVP) | May 6, 2026

Optimizely SaaS CMS Developer Certification Exam

The Optimizely SaaS CMS Developer Certification is an industry-recognized credential for developers and architects who build scalable, composable...

Megha Rathore | May 5, 2026

Piwik PRO Connector for Optimizely CMS — Now on NuGet (and Yes, It Speaks Both 12 and 13)

Analytics has spent the last decade living in another tab — and what's in that tab usually isn't the full story. Between consent requirements,...

Allan Thraen | May 4, 2026 |

A First Look at Optimizely Remote MCP Server for Experimentation

Optimizely just released a Remote MCP Server for Experimentation and I've been trying it out to see what it can do. If you don't know, MCP (Model...

Jacob Pretorius | May 1, 2026