Должен ли я предпочесть статические методы в C # - PullRequest
19 голосов
/ 08 февраля 2011

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

Есть ли причины, по которым я должен обуздать этот инстинкт?

Ответы [ 6 ]

20 голосов
/ 08 февраля 2011

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

Для меня стало все более естественным объединять функциональное и естественное программирование; Мне нравятся instance методы, которые не выполняют мутаций. Функциональное программирование легче понять, потому что оно препятствует сложным мутациям; ОО-программирование легче понять, потому что код и данные, с которыми он работает, близки друг к другу. Почему выбирают? Охватите силу "и"; делай оба!

12 голосов
/ 08 февраля 2011

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

6 голосов
/ 08 февраля 2011

Почему-то я думаю об этой цитате, когда читаю ваш вопрос:

Вы можете писать на Фортране на любом языке.

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

Причина, по которой я бы ограничил это в многопользовательском проекте, заключается в том, что это не типичный C # (это действительно C # с наручниками). Вам просто нужно, чтобы один человек нарушил правило и объявил статическое изменяемое свойство, и все пошло к черту.

0 голосов
/ 08 февраля 2011

Отличный вопрос.

Я думаю, что ответ зависит от контекста того, что делает ваш код, и насколько он статичен.

Мой код видел меньше статических случаев, так как яЗапрограммируйте много интерфейсов и помечайте некоторые методы как «защищенные виртуальные», а не «статические» для таких случаев, как шаблон извлечения и переопределения модульного тестирования.Это не значит, что вы не можете просто вызывать статические методы из тех, хотя.

0 голосов
/ 08 февраля 2011

Не полностью. Мне действительно нравятся мои методы расширения и Linq, но OO-язык должен использоваться как OO. Кроме того, все это необходимо для ЦП и для нескольких слоев в дополнение к этому.

0 голосов
/ 08 февраля 2011

Существует множество причин, по которым этот инстинкт следует обуздать при написании ООП.

Состояния и поведение объектов;

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

Я думаю, что только этой причины достаточно, чтобы обуздать статические модификаторы.

И по понятной причине, мы должны слушать миссис Лисков. здесь

...