Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

​Наследовать? Или юзать как есть?

544  
Murr патриот14.12.18 13:29
Murr
NEW 14.12.18 13:29 

Наследовать? Или юзать как есть?


Есть самописный, т.е. исходники доступны, класс, инстансы которого будут использоваться в 4-5-(может и больше) различных либах.

Класс лежит в либе которая шарится между другими либами и проектами.

Есть не нулевая вероятность, что в разных местах будут требоваться доработки по функциональности.

Про то что все можно дописать в этот класс - вопроса нет - можно, будет работать.


Могу написать свой код в двух вариантах:

- по первому - использую инстансы как есть и добавляю функции по мере необходимости

- по второму - делаю пустого наследника в каждой из либ, пишу специфический код по месту, спускаю общий код в базовый класс.


Исходя из того, что полный объем задачи мне не известен - какой вариант предпочтительнее?


Текущий объем соурсоv класса - 40 Кб.

#1 
AlexNek патриот14.12.18 16:29
AlexNek
14.12.18 16:29 
в ответ Murr 14.12.18 13:29
по первому - использую инстансы как есть и добавляю функции по мере необходимости

Это если чисто по теории "open/close принцип" SOLID

но теория не всегда согласуется с практикой спок

#2 
Murr патриот14.12.18 17:12
Murr
NEW 14.12.18 17:12 
в ответ AlexNek 14.12.18 16:29

Это если чисто по теории "open/close принцип" SOLID

------

Для того, чтобы это О использовать надо знать какая функциональность будет иметь место.

У меня же нет информации об этом. Завтра буду курочить еще какую-то часть - выплывет что-то другое, не обязательно совместимое с имеющимся...

Просто недостаточно информации...

#3 
AlexNek патриот14.12.18 22:01
AlexNek
NEW 14.12.18 22:01 
в ответ Murr 14.12.18 17:12
Завтра буду курочить еще какую-то часть - выплывет что-то другое

Нут так в этом случает "общее" в базовом классе будет еще хуже

#4 
Murr патриот20.12.18 10:36
Murr
NEW 20.12.18 10:36 
в ответ AlexNek 14.12.18 22:01

Нут так в этом случает "общее" в базовом классе будет еще хуже

-----

Собирать потом по кусочкам - тоже не самое приятное.

Решил делать весьма компромиссный вариант:

- базовый класс и максимум возможного в нем.

- наследоваться в пустые классы-имплементаторы для каждого случая и что-то быстрое делать там.

- добавить класс-ключ с перечнем ключей возможных наследников и элементарно свитчится при различиях (ну или как по-другому когда станет понятно что куда).


#5 
  moose старожил20.12.18 18:55
NEW 20.12.18 18:55 
в ответ Murr 14.12.18 13:29, Последний раз изменено 20.12.18 18:56 (moose)

а вы используете какие-нибудь "чужие" класс? например, System.Math. вам отдуда в одном месте понадобилось только sqrt(), в другом - только atan(), ... . вас не раздражает, что в классе есть еще пару дюжин методов, о которых вы ничего не знаете (и зачем оно вас сейчас?). а если класс - ваш собственный, то нужно обязательно поделать что-нибудь через ж*опу, вместо того, чтобы расширять его по мере надобности. если сами там колдуете - фер с ним (с вам), а представьте себе, кто-то вынужден туда, и имеем два варианта:

- все в одном классе, в одной библиотеке. нет вопросов

- ваша суперконструкция с пустышками, наследованиями, вариантами.... мысли возникают сразу "кто этот ..., который такое наваял? главное - ЗАЧЕМ!?"


самая большая ваша задача - имена методам придумать правильные, чтобы понятно было, что там происходит, без комментариев. а будут появляться проблемы - будете их по мере поступления решать. возможно, даже так, как вы описали (хотя опять спрошу - ЗАЧЕМ?). а пока, как вы указали, "полный объем задачи мне не известен", зачем усложнять то, что в этом не нуждается? перечитайте ваш первый пост еще раз. там есть одна здравая мысль:


Про то что все можно дописать в этот класс - вопроса нет - можно, будет работать.

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


#6 
Срыв покровов коренной житель21.12.18 19:01
NEW 21.12.18 19:01 
в ответ moose 20.12.18 18:55

вообще это одна из немногих толковых тем мура.

Сравнение с System.Math вообще мимо.

#7 
  moose старожил21.12.18 20:13
NEW 21.12.18 20:13 
в ответ Срыв покровов 21.12.18 19:01

в чем "толковость" темы?

мимо чего? мимо вашего понимания? если вы не видите связи, это не означает, что ее нет. просто вы ее не видите.

#8