Каковы лучшие практики для управления свойствами / полями (и данными) и методами в классах?
Вопрос: Каковы лучшие практики для управления свойствами / полями, их данными и методами, используемыми для получения и установки свойств с данными в C#?
Я видел два распространенных сценария:
Поместите свойства / поля и методы, используемые для загрузки своих данных в один класс. Обычно метод (ы) вызывается в Конструкторе, и поэтому всякий раз, когда создается экземпляр этого класса, методы загрузки данных будут вызываться немедленно. Простой пример может быть таким:
public class MetaData { public MetaData() { LoadData(); } public string Id { get; set; } public string Name { get; set; } public Double PrivateKey { get; set; } private void LoadData() { var rnd = new Random(); Name= "Farhan"; Id = Name + '_' + rnd.Next(); PrivateKey = rnd.NextDouble(); } }
Поместите свойства / поля в отдельный класс (может называться Storage Class) и другой класс, содержащий методы, используемые для загрузки свойств / полей этого класса.
public class MetaData { public string Id { get; set; } public string Name { get; set; } public Double PrivateKey { get; set; } } public class DataContext { public MetaData metData = new MetaData(); public void LoadData() { var rnd = new Random(); metData.Name = "Agha"; metData.Id = metData.Name + '_' + rnd.Next(); metData.PrivateKey = rnd.NextDouble(); } }
Лично я чувствую, что первый подход лучше, но я хотел бы получить знания о лучших практиках с учетом вопросов управления кодом, удобочитаемости и производительности.
3 ответа
Свои предпочтения. Одни любят один путь, другой любят другие. Некоторые из них соответствуют определенным рекомендациям, а другие - не по отраслевым стандартам. Принимая принцип SOLID, который говорит о единой ответственности для класса, вы можете просто объявить свойства и создать другой файл, в котором вы пишете только метод сохранения.
В то время как другие могут записать все операции CRUD в один файл, связанный с конкретной сущностью. Но я рекомендую придерживаться принципов SOLID, и есть ряд других рекомендаций и принципов, которые вы должны рассмотреть.
Если вы хотите избежать написания свойств, как вы знаете, это требует времени, поэтому все, что вы можете сделать, чтобы сэкономить время или простой способ, - это нажать ctrl + k + x, чтобы открыть окна инкапсуляции и автоматически сгенерировать ваши свойства.
Public string id{get;set;}
public string name{get;set;}
public int age {get;set;}
Что ж, это скорее дизайнерское решение, которое ваша команда должна принять на основе философии, которой они следуют.
По моему мнению: класс - это план сущности реального мира. Сущность реального мира может иметь некоторые атрибуты и некоторое поведение. Все эти атрибуты и поведение должны быть представлены вашим классом. Таким образом, здесь приходит понятие инкапсуляции.
Если говорить о конструкторах, они инициализаторы. В языке неспециалистов конструктор является инициализатором объекта, который обеспечивает предварительную инициализацию всех необходимых вещей для использования класса, прежде чем мы доставим объект в программу. Например: Человек - это класс (сущность реального мира). Чтобы человек функционировал, его сердце должно биться. Поэтому мы вызовем его метод StartBeating в конструкторе, чтобы убедиться, что он жив, когда мы доставляем человека вызывающей стороне.
Я надеюсь, что это поможет вам сузить свой подход.