A month ago, Jeff Atwood (Coding Horror) wrote a blog post about Spartan
The idea is to tend toward minimalism coding style: Minimalism
isn’t always the right choice, but it’s rarely the wrong choice.
I figured out that many of Spartan Programming tenets can be expressed as
Horizontal complexity. The depth of nesting of control structures.
WARN IF Count > 0 IN SELECT METHODS WHERE ILNestingDepth > 3
Vertical complexity. The number of lines or length of code (all routines, and and preferably larger software units such as classes fit within a single screen).
WARN IF Count > 0 IN SELECT METHODS WHERE NbLinesOfCode > 15
Parameters. The number of parameters to a routine or a generic structure.
WARN IF Count > 0 IN SELECT METHODS WHERE NbParameters > 4
WARN IF Count > 0 IN SELECT METHODS WHERE NbVariables > 4
Conditionals. The number of if and multiple branch switch statements.
WARN IF Count > 0 IN SELECT METHODS WHERE CyclomaticComplexity > 7
Minimize visibility of
identifiers (what I call Optimal Encapsulation).
WARN IF Count > 0 IN SELECT METHODS WHERE CouldBePrivate
This applies also to types and fields and to any non-public visibility
level, for example.
WARN IF Count > 0 IN SELECT TYPES WHERE CouldBeInternal
Minimize variability of
variables. Strive to make fields read-only, methods pure and types
immutable (see also Immutable types: understand their benefits and use them).
Immutables fields that could be declared with the readonly keyword.
WARN IF Count > 0 IN SELECT FIELDS WHERE
IsImmutable AND !IsInitOnly
Immutable types that could be tagged with a ImmutableAttribute.
WARN IF Count > 0 IN SELECT TYPES WHERE IsImmutable AND
Pure methods that could be tagged with a PureAttribute.
WARN IF Count > 0 IN SELECT METHODS WHERE
!HasAttribute "OPTIONAL:NDepend.CQL.PureAttribute" AND
!ChangesObjectState AND !ChangesTypeState AND
NbLinesOfCode > 0
Use annotations or restrictions whenever possible: Types that could be declared as sealed (see also Rambling on the
WARN IF Count > 0 IN SELECT TYPES WHERE
IsClass AND NbChildren == 0 AND !IsSealed