То, как ваша структура ОО-программы - какие объекты вы используете и как вы их упорядочиваете - действительно зависит от многих факторов: возраста проекта, общего размера проекта, сложности проблемы и немного только для личного вкуса.
Лучший совет, который я могу придумать, заключит все причины ОО в один быстрый урок - это то, что я подобрал, изучая шаблоны проектирования: «Инкапсулируйте части, которые меняются». Целью ОО является повторное использование элементов, которые будут повторяться без написания дополнительного кода. Но очевидно, что вам нужно «обернуть» код в объекты только в том случае, если он будет фактически использован повторно или изменен в будущем, поэтому вам следует выяснить, что может измениться, и сделать из него объекты.
В вашем примере причина использования второй настройки может заключаться в том, что вы можете повторно использовать объект EncodedVideo в другом месте программы. В любое время, когда вам нужно иметь дело с EncodedVideo, вы не заботитесь о том, «как я кодирую и использую видео», вы просто используете объект, который у вас есть, и доверяете ему для обработки логики. Также может быть полезно инкапсулировать логику кодирования, если она сложна и может измениться. Затем вы изолируете изменения только в одном месте кода, а не во многих потенциальных местах, где вы могли бы использовать объект.
(Вкратце: конкретный пример, который вы опубликовали, не является допустимым кодом C #. Во втором примере у статического метода нет возвращаемого типа, хотя я предполагаю, что вы хотели, чтобы он возвращал объект EncodedVideo.)