ООП. Объект загружает сам себя - это нормально?

Я вам не Димон.
Дата: 17.09.2018 08:25:04
Всем привет!
В общем, раньше я не был ООП-шником, потом как-то втянулся и пошло-поехало.
В одном проекте (C# VS2017) "достукался" до такой строчки кода:

MySettings = MySettings.Load_from_File(FileName);


В общем всё работает, но вопрос в том - нормальная ли это практика, что объект (экземпляр класса) загружает сам себя из файла (и изменяется при этом) ?
WebSharper
Дата: 17.09.2018 10:00:17
это нарушение принципа единственной ответственности и separation of concerns.

Так же рекомиендую прочитать сошлашение о наименовании в C#
Лысый дядька
Дата: 17.09.2018 10:12:07
Я вам не Димон.
В общем всё работает, но вопрос в том - нормальная ли это практика, что объект (экземпляр класса) загружает сам себя из файла (и изменяется при этом)

Не может объект загружать сам себя. Загружает скорее всего статический метод класса, скорее всего вы изобретаете давно известный паттерн
Roman Mejtes
Дата: 17.09.2018 10:25:20
для того, чтоб следовать принципу единственной ответственности, поступайте следующим образом.
попробуйте описать необходимый для реализации класс 1 предложением:
1. Класс который описывает параметры настройки
2. Класс который загружает параметры из файла
3. Класс который загружает параметры из базы
и т.д. Когда класс можно описать 1им коротким предложением, скорее всего соответствует этому принципу.
mayton
Дата: 17.09.2018 11:08:38
Я вам не Димон.,

Метод должен быть статическим и тогда с правой стороны у нас будет стоять просто функция (stateless) которая просто инстанциирует объект.

По аналогии с созданием синглтона.
Я вам не Димон.
Дата: 17.09.2018 17:14:10
спасибо всем,
я также пришел к мысли, что загрузку инстанса (десериализацию из бинарника) лучше делать статическим методом.
Я вам не Димон.
Дата: 17.09.2018 17:27:03
WebSharper
Так же рекомендую прочитать соглашение о наименовании в C#
смотрел как-то на одном сайте. В общем мне гораздо больше нравится разделять слова символом подчёркивания - и где-то я даже видел - утверждалось, что такой вариант вполне приемлемый.
softwarer
Дата: 17.09.2018 17:40:30
Roman Mejtes
для того, чтоб следовать принципу единственной ответственности, поступайте следующим образом. попробуйте описать необходимый для реализации класс 1 предложением:

Класс, который реализует всю функциональность приложения

Я вам не Димон.
В общем всё работает, но вопрос в том - нормальная ли это практика, что объект (экземпляр класса) загружает сам себя из файла (и изменяется при этом) ?

Если хорошо решает стоящие в этом месте задачи и не вызывает проблем - это адекватное решение. Если плохо решает стоящие в этом месте задачи или вызывает проблемы - это неадекватное решение. "Нормальной практики", вообще говоря, не существует, это просто сокращённые правила для тупых уровня "не используй goto". Такое решение есть куда улучшать. А вот нужно ли улучшать - зависит от того, где и как применяется.
Я вам не Димон.
Дата: 18.09.2018 07:00:18
softwarer
"Нормальной практики", вообще говоря, не существует,

Под "Нормальной практикой" здесь я подразумеваю устоявшиеся шаблоны решения типовых задач.
WebSharper
Дата: 18.09.2018 10:37:06
Я вам не Димон.
смотрел как-то на одном сайте. В общем мне гораздо больше нравится разделять слова символом подчёркивания - и где-то я даже видел - утверждалось, что такой вариант вполне приемлемый.


Вопрос, как именно наименовать методы абсолютно непринципиальный, но удобнее когда все именуют одинаково. Соглашения о наименовании для C# описаны тут.