Информация об изменениях

Сообщение Re[5]: Интерфейсы и реализация от 03.09.2020 3:39

Изменено 03.09.2020 3:40 rosencrantz

Re[5]: Интерфейсы и реализация
Здравствуйте, ·, Вы писали:

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


R>>Там перед кодом дофига написано по поводу мотивации

·>Я не очень понимаю эту мотивацию, вот и задаю вопросы.

R>>1. Можно 3 модуля: csv, запись, импорт. Импорт использует первые два.

R>>2. Можно 1 модуль: импорт. Сам умеет csv и запись.
R>>3. Можно эту фичу оформить как часть уже существующего модуля и вообще в один метод всё свернуть.

R>>Я не всегда хочу п.1, но когда я хочу, тогда я делаю "интерфейс с одной реализацией". Мой пример кода — это п.1, ваш — это п.2. О чём мы тут спорим?

·>Я пытаюсь выяснить что скрывается за словом "хочу". Ведь должны быть какие то более-менее рациональные критерии выбора. Это и есть вопрос топикстартера.

Тс задал вопрос про классы, поэтому я отвечаю про классы. Нужен интерфейс или не нужен (у меня) диктуется тем, хотим мы выделить модуль или нет. Если решение состоит из двух (или больше) модулей, интерфейсы нужны, даже если реализация всего одна. Если решение состоит из одного модуля, интерфейсы не нужны. Один и тот же набор классов можно воспринимать и как один модуль, и как несколько.

Хотим мы один модуль или несколько — тут по-моему всё сильно зависит от ментальных моделей и предпочтений. Лезет задачу в голову легко, или со скрипом, или вообще не лезет. Кто-то думает — "мне дают какие-то записи, я группирую их по 100 и делаю batch insert" и ему комфортно. Кто-то думает — "я читаю из csv по 100 строчек и делаю batch insert" и ему комфортно. Модули по-моему откуда-то отсюда вытекают (как и coupling/cohesion, SRP, правило 5+/-2 и прочие всем известные уловки).
Re[5]: Интерфейсы и реализация
Здравствуйте, ·, Вы писали:

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


R>>Там перед кодом дофига написано по поводу мотивации

·>Я не очень понимаю эту мотивацию, вот и задаю вопросы.

R>>1. Можно 3 модуля: csv, запись, импорт. Импорт использует первые два.

R>>2. Можно 1 модуль: импорт. Сам умеет csv и запись.
R>>3. Можно эту фичу оформить как часть уже существующего модуля и вообще в один метод всё свернуть.

R>>Я не всегда хочу п.1, но когда я хочу, тогда я делаю "интерфейс с одной реализацией". Мой пример кода — это п.1, ваш — это п.2. О чём мы тут спорим?

·>Я пытаюсь выяснить что скрывается за словом "хочу". Ведь должны быть какие то более-менее рациональные критерии выбора. Это и есть вопрос топикстартера.

Тс задал вопрос про классы, поэтому я отвечаю про классы. Нужен интерфейс или не нужен (у меня) диктуется тем, хотим мы выделить модуль или нет. Если решение состоит из двух (или больше) модулей, интерфейсы нужны, даже если реализация всего одна. Если решение состоит из одного модуля, интерфейсы не нужны. Один и тот же набор классов можно воспринимать и как один модуль, и как несколько.

Хотим мы один модуль или несколько — тут по-моему всё сильно зависит от ментальных моделей и предпочтений. Лезет задачу в голову легко, или со скрипом, или вообще не лезет. Кто-то думает — "мне дают какие-то записи, я группирую их по 100 и делаю batch insert" и ему комфортно. Кто-то думает — "я читаю из csv по 100 строчек и делаю batch insert" и ему комфортно. Модули по-моему откуда-то отсюда вытекают (как и coupling/cohesion, SRP, правило 5+/-2 и прочие всем известные уловки).