Обновить
25
0
ApeCoder@ApeCoder

Разработчик

Отправить сообщение

Если вы подменяете класс другой реализацией, значит у вас код использует не контракт этого класса а контракт какой-то абстракции, которая общая для класса и реализации. Т.е. интерфейс. Просто вы его не объявляете, а держите в уме.

точка расширения. Например если у вас система должна расширяться пунктом меню, если есть класс поддерживающий интерфейс IMenuItem, добавляете свое расширение, которое поддерживает IMenuItem и где-то отмечает что его нажали, проверяете что, в меню появился соответсвующий пункт, имитируете нажаитие и проверяете что раширение зарегистрировало где-то что его нажали.

Любой, наверное. Пишете тестовое расширение и тестируете контракт.

Это называется YAGNI

public static class Test
{
    private static IEnumerable<string> GraphemeClusters(this string s) {
        var enumerator = StringInfo.GetTextElementEnumerator(s);
        while(enumerator.MoveNext()) {
            yield return (string)enumerator.Current;
        }
    }
    private static string ReverseGraphemeClusters(this string s) {
        return string.Join("", s.GraphemeClusters().Reverse().ToArray());
    }

    public static void Main()
    {
        var s = "Les Mise\u0301rables";
        var r = s.ReverseGraphemeClusters();
        Console.WriteLine(r);
    }
}

Кандидат может накопить фидбеки, обобщить и понять что востребовано и важно

Не плевать, но не настолько, чтобы давать письменный детальный фидбек. Как на улице вы поможете встать человеку или подскажете сколько времени, но не пойдете к нему клеить обои домой.

Заключить договор на разовую услугу "Консультирование по найму себя"?

Это называет паттерном

Приведите определение слова "принцип", учтите, что изначально они писались на английском. Я вижу в каких-то случаях принцип понимают как что-то чему можно следовать или не следовать избирательно.


не тяните его в программирование

Если у вас есть какая-то стройный абсолютно непротиворечивый набор правил, который приводит к идельаному ОО дизайну, я хотел бы его увидеть. Дизайн всегда результат компромиссов и сложения многих сил.


Мне не интересно заниматься археологией

Т.е. понять, что имеется ввиду вы не хотите?

лишь иногда, ведь тогда это значит, что ты придерживаешься не принципа, а чего-то ещё, что лишь иногда совпадает с принципом.

Тут логическое противоречие. Если я иногда чем-то руководствуют то это значит что я этим руководствуюсь. Иногда. Даже если в другие моменты я руководствуюсь чем-то другим.


Например есть принцип презумпции невиновности, и он не распространяется не некоторые административные правонарушения.
Т.е. суд руководствуется КоаПП который содержит правило для включения и выключения принципа.


Вообще, если деконструировать эту выдержку до конца, то весь смысл принципа сводится к "если вы думаете, что потребуется какая-то точка расширения, то добавьте её, а если не думаете — ну не добавляйте",

Я бы сказал по другому "если вы думаете, что разным муодлям потребуютется вариация поведения, постарайтесь его абстрагировать м вынести в точку расширения а не менять модуль". Это не тавтоология. Сейчас это для вас очевидно/подсознательно, потому, что вы много примеров такого проектирования постоянно видите. Посмотрите в книжку Мейера там немного написано про то, как с изменениями работали до ОО.

Совершенно согласен. Только с одним допущением. Если мы живем в мире однобитовых существ у которых есть только true и false. Другими типами они оперировать не умеют.


Либо программист абсолютно точно может предсказать будущее либо вообще не может.


Либо принцип соблюдается всегда и везде в полной степени либо он на практике не работает.


Либо кофе машина варит напиток всегда и везде (даже в пустыне без электричества) либо она бесполезна вообще.


Если вдруг мы научимся оперировать эвристиками и вероятностями и не требовать "все или ничего", может статься, принцип и работает. В каких-то случаев. Просто надо повысить разрядность переменных в своих рассуждениях битов до 8 хотя бы.

Я добрался до Мейера, который ввел этот принцип. Заключительная фраза


• Neither the Open-Closed principle nor redefinition in inheritance is a way to address
design flaws, let alone bugs. If there is something wrong with a module, you should
fix it — not leave the original as it is and try to correct the problem in a derived
module. (The only potential exception to this rule is the case of flawed software
which you are not at liberty to modify.) The Open-Closed principle and associated
techniques are intended for the adaptation of healthy modules: modules that,
although they may not suffice for some new uses, meet their own well-defined
requirements, to the satisfaction of their own clients.


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


Одним из вариантов модулей являются specification modules закрытие котрых означает утверждение, собственно спецификации.


По мотивации, я думаю, понятно, что скоуп закрытия это выпуск версии. (Сначала дизайним интерфейс, закрываем его, потом имплементируем зависимые модули, если им надо, что-то особенное, то они должны расширять исходный модуль, вместо того, чтобы изменять его, потом выпускаем).


Так же по мотивации понятно, что скорее всего имеются ввиду несовместимые изменения (совместимые не вызовут каскадного обновления) — либо какие-то древние ограничения, когда нельзя было быстро обновить модуль.


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

а создать ещё одну сортировку рядом, даже если старая вам не нужна и придётся ходить по всему проекту и менять использование старой сортировки на новую.

Извините, это ваш вывод или инструкция в таком виде есть у кого-то из авторов принципа?


вот, например, из статьи Мартина,


"It should be clear that no significant program can be 100% closed. For example, consider
what would happen to the DrawAllShapes function from Listing 2 if we decided that
all Circles should be drawn before any Squares. The DrawAllShapes function is
not closed against a change like this. In general, no matter how “closed” a module is, there
will always be some kind of change against which it is not closed.
Since closure cannot be complete, it must be strategic. That is, the designer must
choose the kinds of changes against which to close his design. This takes a certain amount
of prescience derived from experience. The experienced designer knows the users and the
industry well enough to judge the probability of different kinds of changes. He then makes
sure that the open-closed principle is invoked for the most probable changes."


Я понимаю, что если у кого-то такое изменение, то это значит, что он просто зафейлили принцип (каковой не обязан и не может 100% соблюдаться) при проектировании модуля — не учли класс возможных изменений.

Те же размышления применимы и к кандидату.

Вопрос в том, можно ли сделать нетекущую абстракцию для всех СУБД. Включая обещания по перфорамсу, которые зачастую неявные.

добавить перфорации в корпусе для охлаждения конденсатора

интересно, почему такого нет из коробки?

Вероятно это правило введено для предотвращение бартера. Я вам дарю яблоки, вы мне дарите отвертки а государство не получает ничего.

Узнать за это время человека, как он себя будет вести в той или иной ситуации… невозможно, тем более что модель поведения на собеседование и в реалях проекта может существенно отличаться.

Это означает "Никогда ни для кого узнать невозможно?" или "Невозможно узнать со 100% уверенностью для всех?".


Я думаю есть такие кандидаты которых можно достоверно оценить и отсеять.


Например, если он на собеседовании воняет или все время ведет себя неконструктивно.

Обычно рекомендуют архитектуру ports and adapters. Не надо эмулировать автокад, надо делать порт у вашего приложения, который декларирует только то подмножество интерфейса, которое нужно именно ему от автокада.


Отдельно пишутся интеграционные тесты на адаптеры (на то, что они выполняют контракт порта)

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность