[SRP]
От: nikda  
Дата: 03.11.16 08:51
Оценка:
Пусть есть некоторый класс MyData, который представляет данные предметной области (например: Отчёт, Лабиринт, Игровая доска, ...)
Соответственно он предоставляет через свои методы данные внешним объектам (например данные отчёта, структуру лабиринта, позицию игрока, клетки доски и т.д.)

Вопрос в том куда помещать метод создания самого объекта класса MyData:
* в сам класс MyData
* в другой класс, например MyDataCreator

Если в сам класс MyData, то не нарушает ли это принцип SRP ?
Если другой класс, то не вносит ли это излишнюю сложность ?
Re: [SRP]
От: VTT http://vtt.to
Дата: 03.11.16 09:08
Оценка:
Здравствуйте, nikda, Вы писали:

N>Пусть есть некоторый класс MyData, который представляет данные предметной области (например: Отчёт, Лабиринт, Игровая доска, ...)

N>Соответственно он предоставляет через свои методы данные внешним объектам (например данные отчёта, структуру лабиринта, позицию игрока, клетки доски и т.д.)

N>Вопрос в том куда помещать метод создания самого объекта класса MyData:

N>* в сам класс MyData
N>* в другой класс, например MyDataCreator

N>Если в сам класс MyData, то не нарушает ли это принцип SRP ?

Если этот метод тривиален, то не нарушает, если нетривиален, то нарушает.

N>Если другой класс, то не вносит ли это излишнюю сложность ?

Если этот метод не нужен, то вносит, если нужен, то не вносит.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re: [SRP]
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 03.11.16 10:30
Оценка:
Здравствуйте, nikda, Вы писали:

N>Пусть есть некоторый класс MyData, который представляет данные предметной области (например: Отчёт, Лабиринт, Игровая доска, ...)

N>Соответственно он предоставляет через свои методы данные внешним объектам (например данные отчёта, структуру лабиринта, позицию игрока, клетки доски и т.д.)
Так-то MyData должна хранить только данные в их чистом виде, а отчёты и прочее должно генерироваться во view.
N>Вопрос в том куда помещать метод создания самого объекта класса MyData:
N>* в сам класс MyData
Template pattern
N>* в другой класс, например MyDataCreator
Factory pattern

N>Если в сам класс MyData, то не нарушает ли это принцип SRP ?

Нет.
N>Если другой класс, то не вносит ли это излишнюю сложность ?
Зависит от. Фабрику делают если есть много разных сущностей которые ты хочешь производить но выдавать какую-то абстракцию или интрфейс скрывая детали реализации.
Sic luceat lux!
Re: [SRP]
От: Sharov Россия  
Дата: 03.11.16 11:04
Оценка:
Здравствуйте, nikda, Вы писали:

N>Пусть есть некоторый класс MyData, который представляет данные предметной области (например: Отчёт, Лабиринт, Игровая доска, ...)

N>Соответственно он предоставляет через свои методы данные внешним объектам (например данные отчёта, структуру лабиринта, позицию игрока, клетки доски и т.д.)

N>Вопрос в том куда помещать метод создания самого объекта класса MyData:

N>* в сам класс MyData
N>* в другой класс, например MyDataCreator

N>Если в сам класс MyData, то не нарушает ли это принцип SRP ?


Нет не нарушает. С этой тз и конструктор класса нарушает SRP класса.

N>Если другой класс, то не вносит ли это излишнюю сложность ?


Вносит, лишние места-файлы, куда надо заглядывать. Лучше все относящееся к MyData держать в соотв. файле или классе.
Кодом людям нужно помогать!
Re: [SRP]
От: Vladek Россия Github
Дата: 03.11.16 17:22
Оценка:
Здравствуйте, nikda, Вы писали:

N>Пусть есть некоторый класс MyData, который представляет данные предметной области (например: Отчёт, Лабиринт, Игровая доска, ...)

N>Соответственно он предоставляет через свои методы данные внешним объектам (например данные отчёта, структуру лабиринта, позицию игрока, клетки доски и т.д.)

Через методы выражают поведение, если это просто доступ к данным, то мы имеем дело с обычной структурой данных.

N>Вопрос в том куда помещать метод создания самого объекта класса MyData:

N>* в сам класс MyData
N>* в другой класс, например MyDataCreator

Если этот "метод создания" занимается тупым выделением памяти под объект, то его вообще не нужно создавать, он уже есть: оператор new.

N>Если в сам класс MyData, то не нарушает ли это принцип SRP ?

Не нарушает.
N>Если другой класс, то не вносит ли это излишнюю сложность ?
Привносит.
Re: [SRP]
От: Sinix  
Дата: 03.11.16 19:18
Оценка: 6 (1)
Здравствуйте, nikda, Вы писали:

N>Вопрос в том куда помещать метод создания самого объекта класса MyData:


Всё просто:
1. Не стоит разрабатывать архитектуру от паттернов / волшебных аббревиатур / прочих абстрактных "универсальных" критериев
  2.
Не стоит разрабатывать архитектуру кода от паттернов / волшебных аббревиатур / прочих абстрактных "универсальных" критериев
  3.
Ну, вы поняли ; )


Почему — нестареющая классика
Автор: XopoSHiy
Дата: 14.04.10
от Horoshiy + вот тут
Автор: Sinix
Дата: 20.01.16
расписывал применительно к SRP.

Вот тут
Автор: tyomchick
Дата: 16.06.15
и тут
Автор: okon
Дата: 13.01.16
можно посмотреть примеры кода "от паттернов" vs решения от сценариев использования.

И заключительный — ещё одна вариация SRP в виде пары coupling / cohesion
Автор: Sinix
Дата: 24.03.14
.

По теме — начните с простого конструктора.
Если логика тяжёлая или включает в себя не только создание объекта, но и его настройку, заполнение свойств из других объектов и тыды — вынесите в static factory-метод.
Если вся логика находится в ответственности другого сервиса (например, объект вытаскивается из СУБД или собирается из xml-я) — выделите логику создания в отдельный сервис, лезть в базу — явно не ответственность самого класса с данными
Re: [GRASP] :)
От: ylem  
Дата: 04.11.16 21:13
Оценка: 3 (1)
https://ru.wikipedia.org/wiki/GRASP

Класс должен создавать экземпляры тех классов, которые он может:

Тут
Автор(ы): Крэг Ларман
Издательство: Вильямс
Цена: 533р.

Применение UML 2.0 и шаблонов проектирования — всемирно известное издание, с помощью которого можно начать "мыслить объектами" и проникнуть в самую суть объектно-ориентированного анализа и проектирования. Основываясь на двух предыдущих изданиях,
про GRASP побольше написано, но тоже довольно компактно и, в отличии от другой всем известной аббревиатуры, это имхо вполне можно применять как рецепты "как делать", а не только как признаки того, как делать не надо.
Короче, пользуясь случаем рекомендую.
Re[2]: [SRP]
От: Tom Россия http://www.RSDN.ru
Дата: 04.11.16 22:11
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>Здравствуйте, nikda, Вы писали:


N>>Пусть есть некоторый класс MyData, который представляет данные предметной области (например: Отчёт, Лабиринт, Игровая доска, ...)

N>>Соответственно он предоставляет через свои методы данные внешним объектам (например данные отчёта, структуру лабиринта, позицию игрока, клетки доски и т.д.)

N>>Вопрос в том куда помещать метод создания самого объекта класса MyData:

N>>* в сам класс MyData
N>>* в другой класс, например MyDataCreator

N>>Если в сам класс MyData, то не нарушает ли это принцип SRP ?

VTT>Если этот метод тривиален, то не нарушает, если нетривиален, то нарушает.

N>>Если другой класс, то не вносит ли это излишнюю сложность ?

VTT>Если этот метод не нужен, то вносит, если нужен, то не вносит.


Хранение данных и предоставление какой то частичной информации из обьекта уже нарушение SRP.
В идеале должно быть — POCO обьект хранящий данные и к нему ещё один обьект с функциями которые принимают обьект как параметр и возвращают из него нужную информацию
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.