Category Archives: Software Engineering
Changing Requirements
We, as software engineers, know full well that requirements change. Indeed, most of us realize that the requirements document is the most volatile document in the project. If our designs are failing due to the constant rain of changing requirements, it is our designs that are at fault. We must somehow find a way to […]
Discriminants are Stinky
I recently came across the suggestion of implementing a ColorValue type that uses an enum field to differentiate different color spaces that can be represented in C# as the following: enum ColorSpace { Cmyk, Rgb, CieLab } class ColorValue { public ColorSpace ColorSpace { get; init; } public double[]? Component { get; init; } } […]
SOLID: Design Principles and Design Patterns
In Design Principles and Design Patterns, Robert C. Martin presented the SOLID principles of object-oriented software design over twenty years ago. “SOLID” continues to be a buzzword included in many resumes today. The principles are reproduced here: A class should have only one reason to change. A module should be open for extension but closed […]
Delegation
Delegation is a good design choice only when it simplifies more than it complicates. (Gamma et al. 21) Work Cited: Gamma, Erich, et al. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994.