Каковы лучшие практики для управления свойствами / полями (и данными) и методами в классах?

Вопрос: Каковы лучшие практики для управления свойствами / полями, их данными и методами, используемыми для получения и установки свойств с данными в C#?

Я видел два распространенных сценария:

  1. Поместите свойства / поля и методы, используемые для загрузки своих данных в один класс. Обычно метод (ы) вызывается в Конструкторе, и поэтому всякий раз, когда создается экземпляр этого класса, методы загрузки данных будут вызываться немедленно. Простой пример может быть таким:

    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();
        }
    }
    
  2. Поместите свойства / поля в отдельный класс (может называться 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 в конструкторе, чтобы убедиться, что он жив, когда мы доставляем человека вызывающей стороне.

Я надеюсь, что это поможет вам сузить свой подход.

Другие вопросы по тегам