Today I had a good conversation with a
colleague about software structure and coding standards. His beliefs
are that a class should be a monolithic so the maintenance is
centralized and everything a developer, mainly newbie or junior, needs
is right there for him/her to maintain/expand the class.
I lean more toward the Single Responsibility and Design Pattern habits.
This conversation was sparked due to us
creating a mapper service for our application. When the mapper is
called it’s responsibility is to move values from one domain object to
another. Utilized in the mapper is a factory that returns a strategy,
when passed a specific enum value. The strategy handles the move of
3-4 specific fields based on the enum value. This makes it more
extensible when another value is added to that enum.
The conversation headed to what extensibility
truly is. He said he subscribed to the idea that he needs to code for
the developer who follows him. This includes using comments. I
believe that if you properly name your variables, classes, methods,
etc. any developer, no matter their skill level, will be able to
understand your code. A developer can almost read it like a book.
My current project manager states that
“comments are apologies”. I happen to agree with him. If you want to
explain 1-n lines of code, encapsulate them in a method and name the
method to tell the developer what the purpose is of those lines of code.
The developer I was talk with stated he sees
the benefits of pair programming and unit testing (phew, thought I was
going to really have to get on my soap box).
What do you guys believe?