Локальные функции и твердые принципы C # - PullRequest
0 голосов
/ 01 июня 2018

Я знаю, что начиная с C # 7.0 мы можем создавать локальные функции, но как это связано с принципами SOLID для достижения хорошей модели проектирования?

Я имею в виду, не нарушает ли это принцип единой ответственности, добавляя функцию в другую функцию?

Мы можем делегировать эту простую задачу для вычисления в другом методе или в другом новом классе?и для принципа Open-Closed, который позволяет мне наследовать от SomeClass, чтобы модифицировать его, теперь это более сложно, теперь мне нужно переписать всю базовую функцию вместо одной части моего кода?

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

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

мы можем создавать локальные функции, но как это связано с принципами SOLID для достижения хорошей модели проектирования?

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

не нарушается ли единая ответственность при добавлении функции внутри другой функции?

Как это так? Принцип единой ответственности гласит, что "каждый модуль или класс должен нести ответственность за одну часть функциональности, предоставляемой программным обеспечением, и эта ответственность должна быть полностью заключена в класс" .То, как вы организуете код внутри класса, не меняет уровень ответственности или реализованную инкапсуляцию.

0 голосов
/ 01 июня 2018

Я согласен с вами в определенной степени.Независимо от того, поддерживают ли ответы здесь так называемые методы бога (маленький g) или нет, я лично, как и вы, чувствую, что методы должны быть точными в том, что они делают.

Тем не менее, локальные функции могут фактически поддерживать SOLID.Одним из примеров является возможность легко подключать обратные вызовы от событий, предоставляя методу единственную ответственность, закрывать область действия и минимизировать ошибки.Это может быть сделано с местными делегатами, но это не так чисто или прямо.

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

Это только два быстрых примера, которые, вероятно, не требуютдебаты или много кода, чтобы проиллюстрировать, как локальные функции могут быть лучше и лучше встроены в SOLID, но есть и другие.

Локальные функции также могут легко влиять на ваш код и затруднять управление / чтение и отрыв от принципов SOLID.Как и любой другой компонент C #, мы несем ответственность за выбор, когда и почему мы используем локальные функции и SOLID, а также другие методы / рекомендации по разработке, которые следует учитывать, когда мы это делаем.Я не согласен с тем, чтобы делать методы более длинными, более сложными или иметь более чем одну работу, которую нужно выполнять только ради методов определения объема.

0 голосов
/ 01 июня 2018

Иногда вам не нужно загрязнять ваш базовый контекст другим методом, который он будет использовать только в одном методе, но вам нужно это как анонимный метод, чтобы сделать что-то в вашем коде, я рекомендую вам взглянуть на это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...