• Проектирование по контракту. Это для повторного использования или для корректности ПО?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Когда вы делаете ПО вы делаете код который взаимодействует с другим кодом.
    Любая функция, процедура, каждая строка --- это код который взаимодействует с другим кодом выше или ниже по тексту. Взаимодействие одного кода с другим кодом всегда осуществляется через некий интерфейс -- набор правил входа\выхода и ожиданий в поведении кода. Даже когда вы объявляете переменную в локальной области видимости - это тоже интерфейс для кода, который использует эту переменную. Другой код ожидает, что в переменная существует, имеет корректное значение, и может быть использована корректным образом. Каждый раз эти правила сосуществования кода различны, они меняются от языка к языку от разработчика к разработчику.
    Лучший язык (моё имхо) - это тот язык который подходит для описания интерфейсов взаимодействия в широком смысле этого слова. Я говорю об интерфейсе как некотором контракте одного кода с другим, одной строки кода со следующей, одного оператора с другими.
    Конечно существуют разные подходы для описания таких интерфейсов. Сейчас распространен принцип описательного "делай как я сказал". В этом подходе программа дробиться на простые сущности, которые каким-либо образом взаимодействуют друг с другом.
    В ООП это классы-объекты, в функциональном - это функции.
    Суть меняется на самом деле слабо, все это нужно чтобы:
    1. формализовать описание интерфейсов взаимодействия.
    2. Прийти к какому-то единообразному способу такого описания.

    В ООП идут дальше, абстрагируясь от конкретной реализации класса, и вводя лишь только способы взаимодействия сущностей (описание этого взаимодействия). Т.о. появляется абстрактные классы и интерфейсы.
    В функциональном способе описания также пошли в сторону абстракции. Например а Haskell есть типы и интерфейсы типов -- это что касается контрактов, и есть функции высших порядков -- это что касается реализации интерфейсов.
    Такими способами уменьшается сложность ПО и дробиться код улучшается надежность.
    Но даже жесткий линейный код на BASIC - это все тот же способ описать интерфейс взаимодействия одного кода с другим.

    Помимо ООП и функционального программирования есть куча других методик:
    Полный список можно тут взять: https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D... - и тот достаточно абстрактно-сырой.

    Короче ООП это не панацея, а лишь еще один способ описания этого дивного и сложного мира и взаимоотношений в нем.
    Ответ написан
    Комментировать
  • Проектирование по контракту. Это для повторного использования или для корректности ПО?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Прочитайте книгу "Чистая архитектура" (Р.Мартин), все встанет на свои места.
    Контракт - не может быть реализацией, это абстракция. Применяется тогда когда планируется менять реализацию (конкретику) контракта по мере эксплуатации системы, обычно в долгоиграющий проектах.

    Абстрактный класс - это родительский класс который дает своим предкам что то общее + необходимость реализации своего контракта, но он относится к конкретике, а не контракту.
    Ответ написан
    6 комментариев
  • Слой данных (Data layer) и слой доступа к данным (DAL) это одно и то же?

    @grinat
    Один слой это. Правда херня это все, в реальном приложение фиг ты сменишь бд, единственная польза что можно замокать для тестов.
    Ответ написан
    Комментировать
  • Как правильно реализовать шаблон "Состояние" на Unity?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    а зачем вам GameState : MonoBehaviour ?? зачем он вам на объекте в сцене?
    состояние же абстрактная весчь))

    GameManager : MonoBehaviour - это норм. менеджер пусть в сцене живет и инициализирует.

    а про ошибку - нельзя MonoBehaviour создавать через NEW.
    только через добавление или поиск компонента.
    state = this.gameobject.AddComponent<GameState>()
    или
    state = someRef.gameobject.GetComponent<GameState>()
    Ответ написан
    Комментировать
  • Как определить в каком порядке реализовывать слои?

    @REDkiy
    Я использую примерно такой подход:
    1. Получаем данные.
    1.1. Запрашиваем из внешних систем или вводим руками.
    1.2. Результат в консоль или в лог-файл.
    2. Сохраняем данные.
    2.1. Создаём БД.
    2.2. Перенаправляем данные из внешних систем в БД.
    3. Обрабатываем данные.
    3.1. Реализуем бизнес-логику.
    3.2. Результаты сохраняем в БД или показываем пользователю.
    4. Отображение результата.
    4.1. Достаём данные из БД и отправляем пользователю.
    4.2. Взаимодействие с пользователем.
    5. Повторяем в необходимом порядке и с необходимыми изменениями по всем слоям.
    Ответ написан
    Комментировать
  • Как определить в каком порядке реализовывать слои?

    MetaAbstract
    @MetaAbstract
    Архитектор информационных систем и баз данных. Ful
    Параллельно и итерационно.
    Ответ написан
    Комментировать
  • Не могу понять что имел ввиду автор. "Разработка архитектуры ПО" и "высокоуровневое проектирование" синонимы или нет?

    MetaAbstract
    @MetaAbstract
    Архитектор информационных систем и баз данных. Ful
    Проектирование это процесс в результате которого получается проект системы. Уровень проектирования не важен, т к верхние уровни декомпозируются в нижние. Архитектура системы это принципиальные решения о ее устройстве. Например SPA или SSR, микросервисы, монолит или модульная система. Причем в процессе проектирования может принято решение о смене архитектуры. Что кстати и следует из определения проектирования. Короче архитектура системы это часть проекта, но выбор архитектуры определят проект. И как итог архитектура это часть высокоуровнего проектирования.
    Ответ написан
    Комментировать
  • Не могу понять что имел ввиду автор. "Разработка архитектуры ПО" и "высокоуровневое проектирование" синонимы или нет?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    В данном случае - одно и тоже.
    Ответ написан
    Комментировать