Я думаю, что у обоих есть свои места.
Вы не должны просто использовать DoSomethingToThing(Thing n)
только потому, что считаете «функциональное программирование - это хорошо». Точно так же вы не должны просто использовать Thing.DoSomething()
, потому что «Объектно-ориентированное программирование - это хорошо».
Я думаю, что все сводится к тому, что вы пытаетесь передать. Перестаньте думать о своем коде как о серии инструкций и начните думать об этом как о параграфе или предложении истории. Подумайте, какие части наиболее важны с точки зрения поставленной задачи.
Например, если часть «предложения», которую вы хотели бы подчеркнуть, является объектом, вы должны использовать стиль OO.
Пример:
fileHandle.close();
В большинстве случаев, когда вы передаете дескрипторы файлов, главное, о чем вы думаете, это отслеживать файл, который он представляет.
контрпример:
string x = "Hello World";
submitHttpRequest( x );
В этом случае отправка HTTP-запроса гораздо важнее, чем строка, являющаяся телом, поэтому submitHttpRequst(x)
предпочтительнее x.submitViaHttp()
Излишне говорить, что они не являются взаимоисключающими. Вы, вероятно, на самом деле будете иметь
networkConnection.submitHttpRequest(x)
, в котором вы смешиваете их обоих. Важно то, что вы думаете о том, какие части выделены, и что вы будете передавать будущему читателю кода.