|
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
|
||||||
Open-closed principle17.06.2023, 13:08. Показов 747. Ответов 5
Является ли нарушением принципа открытости-закрытости, когда ты уже существующий класс, точнее его метод, модифицируешь, но при этом весь сидящий на нём код не требует переписывания и не отваливается, а нужно лишь дописать под новое, дописанное ещё кода, но и без него запустится.
Пример Есть класс, который генерирует данные в вектор со структурой
Теперь понадобилось в структуру добавить новое поле meaning, что бы разделить дополнительно слова по смыслу. Это я только буду дописывать в генераторе данных. И если в обработчике не допишу - всё останется рабочим всё равно. По идее это тоже подходит под принцип открытости-закрытости, когда прошлый код не сыпется и не требует переписывания при добавлении функционала. Что думаете?
0
|
||||||
| 17.06.2023, 13:08 | |
|
Ответы с готовыми решениями:
5
There is already an open DataReader associated with this Command which must be closed first
Принцип open/closed и контруктором |
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
|
|
| 17.06.2023, 13:14 | |
|
Я думаю, что такой случай подходит для создания производного класса с дополнительным полем meaning
Соответственно, в производном классе создаёте новые методы обработки, которые вначале вызывают методы из базового класса, а потом выполняют дополнительную обработку связанную с полем meaning.
1
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 17.06.2023, 13:52 | |||
|
Что касается конкретно этого вопроса, то однозначного ответа нет, потому что это зависит от ситуации. В некоторых случаях при необходимости можно и нужно модифицировать метод, а если такая модификация еще и не затрагивает "сидящий на нем код", то это вообще круто и является следствием правильного применения инкапсуляции. Итого: добавление нового поля в структуру Word обосновано как расширение. То, что генератор данных должен учитывать это изменение это нормально, так и должно быть, иначе не получится правильно сгенерировать данные. В добавок ко всему, ничего не ломается. Так что по той информации что вы предоставили - все ок.
2
|
|||
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
|||
| 17.06.2023, 16:04 | |||
Сообщение было отмечено Laborant666 как решение
РешениеА "Open-closed principle" - это когда модуль спроектирован таким образом, что его поведение можно кастомизировать без необходимости вносить изменение в код самого модуля. А в вашем случае, вы носите изменения в код. Для бизнеса изменение в коде означают, что нужно будет увеличить версию модуля, и потом заново выполнить весь цикл разработки: сборка, тестирование, развертывание. А это - время и деньги. Практический смысл "Open-closed principle" - экономия времени и денег за счет того, что не нужно повторно выполнять полный цикл разработки для модуля, который итак уже был протестирован, и развернут на бою. Например: у вас уже есть тщательно протестированный core.dll Что бы расширить функциональность, вы у себя в коде наследуетесь от каких нибудь интерфейсов, и потом рядышком кладете свой новенький plugin.dll, который будет работать в связке с core.dll А вот саму core.dll вы без очень веских причин не модифицируете.
3
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 17.06.2023, 19:03 | ||
|
eva2326,
Все не так однозначно. Во первых, возможно, код автора еще не является законченным продакшен кодом, который протестировали, во вторых, если использовать новую сущность для поля meaning, то в некоторых случаях могут быть проблемы. Приведу пример. Если автор применит наследование, опишет класс WordWithMeaning : Word и добавит новое поле meaning в новую структуру, при этом если прежний Word не будет больше нужен, то в результате мы получим то, что: 1) везде где использовался Word, ему придется поменять на WordWithMeaning 2) сам WordWithMeaning и зависящие от него участки по-хорошему все равно придется тестировать с новой сущностью В таком случае, проще поменять сам Word, так как мы получим эквивалент WordWithMeaning, работу которого все равно придется тестировать. А без наследования, сущностей будет меньше что сделает программу проще. Что касается вопросов тестирования, то работы в таком случае с учетом вышеуказанного не прибавится. Наоборот, программа станет сложнее. Следовательно, в таком случае разговоры о тестах и деньгах не будут иметь никакого смысла. Как уже говорил,
1
|
||
|
"C with Classes"
|
||
| 17.06.2023, 19:25 | ||
|
0
|
||
| 17.06.2023, 19:25 | |
|
Помогаю со студенческими работами здесь
6
Поясните реализацию SOLID-приниципа Open-closed в JS
Open Loop и Closed Loop системы, какие утверждения верны? Ошибка "attempt to re-open an already-closed object: sqlitequery:" Различие между Open Hash и Closed hash Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|