DEV Community

mohamed Tayel
mohamed Tayel

Posted on

Mastering Clean Code: 4 Essential Techniques for Organizing Data in C#

Meta Description: Discover four essential techniques to organize data effectively in C#: encapsulating fields and collections, replacing strings with enums, avoiding magic numbers with constants, and leveraging subclasses for cleaner, more maintainable code.

1. Encapsulate Fields and Collections

  • Problem: Exposing public fields directly in a class can lead to unmaintainable and insecure code.
  • Solution: Use getter and setter methods (properties in C#) to control access to the field.
  • Example:
  private int _capacity;
  public int Capacity 
  {
      get => _capacity;
      set => _capacity = value; 
  }
Enter fullscreen mode Exit fullscreen mode
  • Benefit: This encapsulation allows for validations or additional logic when accessing or modifying the field.

2. Replace Strings with Enums

  • Problem: Using strings to represent specific values can introduce errors and reduce code clarity.
  • Solution: Replace strings with enums, which provide strongly-typed and restricted values.
  • Example:
  public enum Difficulty 
  {
      Easy,
      Moderate,
      Hard
  }

  public Difficulty TrailDifficulty { get; set; }
Enter fullscreen mode Exit fullscreen mode
  • Benefit: Enums improve type safety, reduce bugs, and enhance code readability.

3. Replace Magic Numbers with Symbolic Constants

  • Problem: Using numbers directly in code without context can be confusing and error-prone.
  • Solution: Replace magic numbers with self-explanatory constants or enums.
  • Example:
  public const int SmallDistance = 5;
  public const int MediumDistance = 8;
  public const int LongDistance = 12;

  if (distance < SmallDistance)
  {
      // Logic
  }
Enter fullscreen mode Exit fullscreen mode
  • Benefit: Constants make the code self-documenting and easier to maintain.

4. Change Type Code with Subclasses

  • Problem: Using strings or numbers to differentiate types in a single class can complicate logic and violate the Liskov Substitution Principle.
  • Solution: Use subclasses to encapsulate type-specific behavior.
  • Example:
  public abstract class Product 
  {
      public abstract string GetDescription();
  }

  public class Backpack : Product 
  {
      public override string GetDescription() => "This is a backpack.";
  }

  public class Rope : Product 
  {
      public override string GetDescription() => "This is a rope.";
  }
Enter fullscreen mode Exit fullscreen mode
  • Benefit: This approach simplifies the base class, organizes type-specific behaviors, and makes the code more maintainable.

Key Takeaways

  • Properly organizing data is critical as your application grows in complexity.
  • Encapsulation, enums, constants, and subclassing are effective tools for improving code readability and maintainability.
  • Refactoring to implement these techniques can prevent bugs and align with principles like the Liskov Substitution Principle.

Final Note

Applying these techniques consistently can make your code cleaner, easier to navigate, and less error-prone. When introducing these changes, ensure comprehensive testing to maintain the behavior and integrity of your application.

Top comments (0)