Ποια είναι η διαφορά και πότε χρησιμοποιείς το καθένα
Στην καθημερινή ανάπτυξη λογισμικού, πολύ συχνά θα βρεθείς να γράφεις “βοηθητικό” κώδικα. Δηλαδή μικρές λειτουργίες που δεν ανήκουν ξεκάθαρα σε ένα domain object, αλλά χρειάζονται ξανά και ξανά.
Εδώ εμφανίζονται δύο βασικά patterns:
- Helper Classes
- Extension Methods
Πολλοί τα μπερδεύουν ή τα χρησιμοποιούν τυχαία. Όμως η διαφορά τους δεν είναι τεχνική λεπτομέρεια, είναι θέμα καθαρότητας, αναγνωσιμότητας και επικοινωνίας μέσω κώδικα.
Και αυτό είναι το πιο σημαντικό.
Helper Classes
Τι είναι
Μια helper class είναι απλά μια static class που περιέχει βοηθητικές μεθόδους.
Δεν “ανήκει” σε κάποιο object. Είναι ένα εξωτερικό εργαλείο.
Παράδειγμα 1: String Helper
public static class StringHelper
{
public static bool IsNullOrShort(string text)
{
return string.IsNullOrEmpty(text) || text.Length < 5;
}
}
Χρήση:
string name = "Nikos";
if (StringHelper.IsNullOrShort(name))
{
Console.WriteLine("Invalid name");
}
Τι συμβαίνει εδώ
- Έχω ένα string
- Θέλω να κάνω κάτι με αυτό
- Πάω σε μια άλλη class για να το κάνω
Δηλαδή: φεύγεις από το object
Παράδειγμα 2: Date Helper
public static class DateHelper
{
public static bool IsWeekend(DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday;
}
}
Χρήση:
if (DateHelper.IsWeekend(DateTime.Now))
{
Console.WriteLine("Relax!");
}
Πλεονεκτήματα
- Απλό και ξεκάθαρο
- Μαζεύεις utilities σε ένα μέρος
- Δεν “πειράζεις” υπάρχουσες classes
Μειονεκτήματα
- Δεν είναι intuitive
- Δεν διαβάζεται φυσικά
- Μεγαλώνει εύκολα και γίνεται “dumping ground”
Extension Methods
Τι είναι
Extension methods σου επιτρέπουν να “προσθέσεις” μεθόδους σε υπάρχουσες classes χωρίς να τις αλλάξεις.
Παράδειγμα 1: String Extension
public static class StringExtensions
{
public static bool IsNullOrShort(this string text)
{
return string.IsNullOrEmpty(text) || text.Length < 5;
}
}
Χρήση:
string name = "Nikos";
if (name.IsNullOrShort())
{
Console.WriteLine("Invalid name");
}
Τι αλλάζει εδώ;
Αντί να λες:
“πάω στο helper”
λες:
“το ίδιο το string ξέρει να το κάνει”
Παράδειγμα 2: Date Extension
public static class DateExtensions
{
public static bool IsWeekend(this DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday;
}
}
Χρήση:
if (DateTime.Now.IsWeekend())
{
Console.WriteLine("Relax!");
}
Η Πραγματική Διαφορά
Δεν είναι θέμα “τι κάνει”, αλλά πώς διαβάζεται.
Σύγκριση
Helper:
if (StringHelper.IsNullOrShort(name))
Extension:
if (name.IsNullOrShort())
Πότε χρησιμοποιείς τι
Χρησιμοποίησε Extension Methods όταν:
- Η λειτουργία σχετίζεται ξεκάθαρα με το object
- Θες readable / fluent code
- Θες να γράφεις “σαν πρόταση”
Παραδείγματα:
- string.IsValidEmail()
- date.IsWeekend()
- list.IsEmpty()
Χρησιμοποίησε Helper Class όταν:
- Η λειτουργία είναι γενική
- Δεν ανήκει σε ένα object
- Έχεις logic που χρησιμοποιεί πολλά types
Παράδειγμα:
public static class MathHelper
{
public static int Add(int a, int b)
{
return a + b;
}
}
Δεν έχει νόημα:
a.Add(b)
Να θυμάσαι..
Η διαφορά δεν είναι τεχνική, είναι νοητική.
Helper Class
εργαλείο έξω από το object
Extension Method
συμπεριφορά πάνω στο object
Top comments (0)