LINUX.ORG.RU

История изменений

Исправление vertexua, (текущая версия) :

Но, извините, даже сеттеры и геттеры наверное в 90% случаев реализованы как прокси-сервис к простой записи/чтению переменной без всяких проверок

Стиль программирования на таких языках изменился с годами достаточно сильно. Многие компании на уровне code style поощряют сильное отделение value class от других классов. Первые еще и иммутабельные обычно и создаются с фабриками, в которых стоят валидаторы. Не зависимо от языка, C++ подобный псевдокод выглядит так

class MyClass {
private:
   MyClass(...)

public:
   MyClass Create(...) {
      Validate(IsLatin(name))
      Validate(0<=age<=150)
      Validate(MatchPhoneNumber(phone_number))
   }

   // NO SETTERS!
}

Класс нельзя мутировать, нельзя создать через какой-то бекдор невалидным. Потому после создания он не только гарантировано валидный, но еще и thread_safe. После создания все работает без проверок в рантайме.

А вот подход с организацией фильтра входящих данных на уровне языка

Необходимости никакой в на уровне языка нету. Ну вот возьми Scala, где есть на уровне языка

case class MyClass(name: String, age:Int) {
   require(IsLatin(name))
   require(0<=age && age<=150)
}

Стало легче? Наверное стало, меньше печатать. Геттеры определены сразу. Сеттеров нету. Есть конструкторы копирования со встроеной мутацией данных (x2=x1.copy(age=10)). Но это просто сокращение бойлерплейта, просто удобство

Исправление vertexua, :

Но, извините, даже сеттеры и геттеры наверное в 90% случаев реализованы как прокси-сервис к простой записи/чтению переменной без всяких проверок

Стиль программирования на таких языках изменился с годами достаточно сильно. Многие компании на уровне code style поощряют сильное отделение value class от других классов. Первые еще и иммутабельные обычно и создаются с фабриками, в которых стоят валидаторы. Не зависимо от языка, C++ подобный псевдокод выглядит так

class MyClass {
private:
   MyClass(...)

public:
   MyClass Create(...) {
      Validate(IsLatin(name))
      Validate(0<=age<=150)
      Validate(MatchPhoneNumber(phone_number))
   }

   // NO SETTERS!
}

Класс нельзя мутировать, нельзя создать через какой-то бекдор невалидным. Потому после создания он не только гарантировано валидный, но еще и thread_safe. После создания все работает без проверок в рантайме.

А вот подход с организацией фильтра входящих данных на уровне языка

Необходимости никакой в на уровне язіка нету. Ну вот возьми Scala, где есть на уровне языка

case class MyClass(name: String, age:Int) {
   require(IsLatin(name))
   require(0<=age && age<=150)
}

Стало легче? Наверное стало, меньше печатать. Геттеры определены сразу. Сеттеров нету. Есть конструкторы копирования со встроеной мутацией данных (x2=x1.copy(age=10)). Но это просто сокращение бойлерплейта, просто удобство

Исправление vertexua, :

Но, извините, даже сеттеры и геттеры наверное в 90% случаев реализованы как прокси-сервис к простой записи/чтению переменной без всяких проверок

Стиль программирования на таких языках изменился с годами достаточно сильно. Многие компании на уровне code style поощряют сильное отделение value class от других классов. Первые еще и иммутабельные обычно и создаются с фабриками, в которых стоят валидаторы. Не зависимо от языка, C++ подобный псевдокод выглядит так

class MyClass {
private:
   MyClass(...)

public:
   MyClass Create(...) {
      Validate(IsLatin(name))
      Validate(0<=age<=150)
      Validate(MatchPhoneNumber(phone_number))
   }

   // NO SETTERS!
}

Класс нельзя мутировать, нельзя создать через какой-то бекдор невалидным. Потому после создания он не только гарантировано валидный, но еще и thread_safe. После создания все работает без проверок в рантайме.

А вот подход с организацией фильтра входящих данных на уровне языка

Необходимости никакой в на уровне язіка нету. Ну вот возьми Scala, где есть на уровне языка

case class MyClass(name: String, age:Int) {
   require(IsLatin(name))
   require(0<=age && age<=150)
}

Стало легче? Наверное стало, меньше печатать. Геттеры определены сразу. Сеттеров нету. Есть кострукторы копирования со встроеной мутацией данных (x2=x1.copy(age=10)). Но это просто сокращение бойлерплейта, просто удобство

Исходная версия vertexua, :

Но, извините, даже сеттеры и геттеры наверное в 90% случаев реализованы как прокси-сервис к простой записи/чтению переменной без всяких проверок

Стиль программирования на таких языках изменился с годами достаточно сильно. Многие компании на уровне code style поощряют сильное отделение value class от других классов. Первые еще и иммутабельные обычно и создаются с фабриками, в которых стоят валидаторы. Не зависимо от языка, C++ подобный псевдокод выглядит так

class MyClass {
private:
   MyClass(...)

public:
   MyClass Create(...) {
      Validate(IsLatin(name))
      Validate(0<=age<=150)
      Validate(MatchPhoneNumber(phone_number))
   }

   // NO SETTERS!
}

А вот подход с организацией фильтра входящих данных на уровне языка

Необходимости никакой в на уровне язіка нету. Ну вот возьми Scala, где есть на уровне языка

case class MyClass(name: String, age:Int) {
   require(IsLatin(name))
   require(0<=age && age<=150)
}

Стало легче? Наверное стало, меньше печатать. Геттеры определены сразу. Сеттеров нету. Есть кострукторы копирования со встроеной мутацией данных (x2=x1.copy(age=10)). Но это просто сокращение бойлерплейта, просто удобство