08 June 2008
C# 3.0 та зрозумілість коду?
В C# 3.0 багато прикольних фішок. Але ось деякі мене дивують. Наприклад, var.
var test = Something.CreateSomethig();
Ми самостійно вбиваємо зрозумілість! Якщо не буде тултіпа який підкаже що там за тип, то ми можемо пропустити помилку! Приклад таких помилок.
var сustomers = new CusomerRepository().MatchCastomers(new AllSpecification());
сustomers.Where(c => c.Name.Equals(“Dude”));
На початку MatchCastomers повертає IQueryable<T>, Where буде зроблено на боці сервера. Через деякий час нуб змінив MatchCastomers так що він повертає IEnumerable<T>. Все компілюється! Але тепер Where працює на клієнті! Але при читанні коду цього ніяк не викупиш!
Якщо буде бажання, кажіть наведу ще декілька прикладів.
Висновок
Але одночасно є і фішки які навпаки її збільшують.
Наприклад, Object Initailizer. Порівняйте
return new ConnectionField
{
ListFieldId = "Something",
SourceFieldId = "Something #2"
};
чи
return new ConnectionField("Something", "Something #2");
Як на мене перший набагато зрозуміліший, адже навіть не дивлячись на код ConnectionField, зрозуміло що встановлюється.
Невеличкий додаток. Потрібно розуміти що варіант з коструктором дозволяє робити схеми де створенний об’єкт буде одразу валідним. Для порівняння з Object Initailizer можна на встановити ListFieldId і якщо код не перевірить його (помилкові очікування) то буде NullReferenceException.
Висновок
Варіант з Object Initailizer потрібно(можна) використовувати для DTO, для необов’язкових властивостей, тощо.
Варіант з конструктором, для обов’язкових власитвостей.
Вчу українську, багато працюю. Цікавлюсь моделюванням небезпек. Більшість часу витрачаю на .Net.