Pull to refresh

Comments 21

Все же не контекст, а описание предметной области

Лично я взял за правило описывать предметную область русскими именами, если только в ТЗ нет однозначного перевода терминов как говорит бизнес на английские термины программы

В ТЗ этого нет? (а никогда нет) - значит и в коде нет!

Соответствие должно быть так чтобы в коде по Ctrl+F искать бизнес термин.

Потому что медицинский термин из 10 слов каждый будет переводить по разному и со словарем.

Весь домен у меня в русскоязычных классах и их методах

А технологическая обвязка как обычно - англоязычная

class Гражданин
{
    public int Id { get; set; }
    public string Имя { get; set; }
}

Не устаете переключать раскладку? Id почему не переведено?

Очевидно же: id это не бизнес термин.

Домен меньше остального кода.

Да флаг вам в руки:

"ЗаболевшиеОРВИ"

Что будете искать в коде?

  1. ArviPatients

  2. PatientsWithArvi

  3. PatientsWithAcuteViralRespiratoryInfection

  4. AcuteRespiratoryInfectionCases

  5. ViralUpperRespiratoryInfectionPatients

  6. RespiratoryViralInfectionPatients

  7. PatientsWithRespiratoryVirusInfection

  8. PeopleAffectedByArvi

  9. ArviInfectedPatients

  10. PatientsDiagnosedWithArvi

  11. ArviPatientCount

  12. PersonsSufferingFromArvi

  13. ActiveArviCases

  14. IndividualsWithArvi

ARVI: 'A' - acute

Но многие поставили бы О

И вариант посложнее

"Хронический рецидивирующий афтозный стоматит полости рта"

Несколько возможных вариантов перевода на английский (PascalCase):

  1. ChronicRecurrentAphthousOralStomatitis

  2. RecurrentChronicAphthousMouthStomatitis

  3. ChronicRelapsingAphthousOralStomatitis

  4. RecurringChronicAphthousMouthInflammation

  5. ChronicRecurrentOralAphthousStomatitis

А вы все заболевания вносите как отдельные сущности? Параметризация/каталогизация не спасают?

программировали на 1С? :-)

Функциональный стиль хорош для работы с данными, параллельных вычислений и минимизации побочных эффектов. - пишет автор
Может я не правильно прочитал статью (перевод) https://habr.com/ru/articles/570642/ Но помоему здесь написано про то что функциональное программирование как раз и создает эти side effects

Функциональное программирование чуть более явно разделяет чистые вычисления и побочные эффекты.

Я имел в виду, что говорить "ФП создаёт сайд эффекты" - это всё равно что говорить "ПДД создаёт нарушителей скорости".

От того что у тебя в языке нет явного разделения на чистые функции и функции с сайд эффектами - это не значит, что у тебя нет сайд эффектов.

Ну вот на примере хаскеля - для побочных эффектов есть монада IO.

Если без хаскеля, то ограничениями синтаксиса. Иммутабельность по умолчанию, отсутствие какого-то глобального состояния, отсутствие объектов как в ООП, где методы имеют полный доступ ко всем полям объекта. На примере Rust - у замыканий есть типы Fn, FnMut, FnOnce, которые тоже позволяют ограничить сайд эффекты в них.

Хорошо, согласен, ФП не создает side effect. Побочный эффект присущ по сути любому языку программирования. Но разве тогда не получается что ООП как-раз шаг в сторону по борьбе с побочными эффектами?

Что вы имеете в виду под "шаг в сторону"?

Логический шаг к возможности контролировать эффекты функций при выполнении программ, на уровне языка программирования

А как ООП позволяет контролировать эффекты, если вроде бы ни в одном из изначально ООП языков такого нет? Ну по крайней мере из мейнстримных.

Максимум какой-нибудь constexpr из плюсов позволяет пометить чистые функции.

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

А как ты ограничишь влияние, если ты в любом месте в коде можешь, например, обратиться к файловой системе или какому-нибудь public static полю?

И что такое "магические методы"?

Ты можешь обращаться к файловой системе через объект который выражает файловую систему в коде. И опять же с помощью магических методов контролировать работу с ним. Магические методы помогают программно задать логику объекта при работе с ним в клиентском коде. Например (в зависимости от языка): создание, вызов объекта как функцию, вызов как строку, сравнение объектов и еще чуть больше разных операций

Всё ещё не понимаю магию.

И инкапсуляция никак не отменяет побочные эффекты.

Вот оберну я файловую систему в объект. Выделю интерфейс, естественно, чтобы можно было реализацию подменять и использовать все оопшные прелести.

Как я могу на уровне типов описать условно "эта функция имеет какой-то побочный эффект" или "эта функция не имеет побочных эффектов"?

Это может быть полезно, например, при кэшировании, при ленивых вычислениях, при работе в многопотоке.

А побочный эффект, в общем случае, запрещает подобное.

С помощью объектов и контроля за ними можете гарантировать что любая функция в коде не изменит данных.

Все ООПшные прелести не завязаны на интерфейсе, само наличие интерфейсов и фабрик не делает по определению архитектуру качественной. Можно написать и плохую фабрику.

Чем плох интерфейс? Если вам не надо расширять, можно и без интерфейса обойтись

Приветствую всех! Вау я даже не думал что она опубликуется это моя первая статья)

class Person { public int PersonId { get; set; }

Зато PersonId искать в тексте легче, чем кучу просто Id.

Sign up to leave a comment.

Articles