|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
В общем, возник на работе спор, не спор, о применении интерфейсов. Суть такова. Есть монстр интерфейс, назовем его IObject c ~50 членами. Есть у него 9 реализаций, 8 их них "нормальные", а 9-ая особая (назовем Type9). Нуждается только в ~45 членов. У соотвественно 5 членов код "реализации" такой: Код: c# 1. 2. 3. 4.
При этом, по всему проекту что то типа Код: c# 1. 2. 3. 4.
Мне не нравится продуктивный код с throw new NotImplementedException(); Мне кажется - это плохо. Я предложил сделать так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Ну и при применении Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
На что услышал: "на фиг надо, по всему проекту проверки перестроить, приведения типов добавлять и вообще можно тип неправильно привести и тоже исключение получить." Что Вы думаете по этому поводу? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2012, 18:59 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
Alexus_ruЧто Вы думаете по этому поводу? 1. throw NotImplemented - это относительно нормально. Не то чтобы хорошо, но допустимо. Хотя Ваш подход в целом лучше. 2. Проверки по всей программе - это категорически ненормально и говорит о принципиальной ошибке проектирования. И Ваше предложение никак не меняет здесь ситуации. Вообще, судя по ситуации, наиболее естественным с точки зрения бизнес-логики методом будет сделать в Type9 пять пустых методов (без всяких исключений), и соответственно повыкидывать дурацкие проверки. Ну а о конкретном случае надо думать, зная детали. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2012, 19:16 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
Alexus_ruЧто Вы думаете по этому поводу? они правы. Оснований для рефакторинга маловато. Преимущества imho не очевидны. Я делал исключения 2-х типов: - по бизнес-логике - системные (туда код может зайти только при фатальных непредвиденных ошибках). Ну а "особый объект" очень сильно зависит от контекста реального проекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2012, 11:20 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
softwarer2. Проверки по всей программе - это категорически ненормально и говорит о принципиальной ошибке проектирования +1. с этого нужно начать. Если существует необходимость в таких проверках, значит там то, что называется "лапшекодом". Ему что первый вариант, что второй не поможет. Только проектирование заново, с нуля. Естественно, не так, как предыдущий. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2012, 11:41 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
iscrafmТолько проектирование заново, с нуля. Естественно, не так, как предыдущий. Зависит от. Есть такой антипаттерн - отлов несуществующих ошибок - он приводит как раз к таким проверкам, а лечится как я описал выше. Надо смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2012, 11:45 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
Alexus_ruВ общем, возник на работе спор, не спор, о применении интерфейсов....Что Вы думаете по этому поводу? качество кода - ниже плинтуса. полностью отсутствует ОО подход. консерваторию под слом. но аккуратно. без революций. или по другому. нахрена в некой точки проверять объект на предмет собака ли это, чтоб она полаяла? достаточно у всех животных "активировать" голос. удачи вам (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2012, 17:43 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
Кит - это не рыба, и в жизни есть много аномалий. Например, все люди могут говорить. Но есть немые. Тогда ваш процесс общения выглядит так: if not Немой: слушать ответ. if Немой: дать карандаш и бумагу и читать ответ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2012, 00:06 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
Надо бы посмотреть, а точно ли эта "девятая реализация", в рассматриваемой модели, должна быть отдельным классом? Или это все же особенность "восьмой реализации", и не более того? Если мы решили, что это все же класс, то получается иерархия Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
В этом случае, действительно, никакие проверки на класс объекта в коде не нужны, а если есть - это свидетельство ошибки проектирования. Всегда достаточно вызывать Код: pascal 1.
. Но проблема в том, что не всегда оправдано выносить особенности реализации в отдельные классы. Например, если мы строим иерархию классов по профессиям (TАртист, ТТанцор, ТПрограммист), то при отсутствии множественного наследования прилепить класс немых будет затруднительно. В этом случае в базовом классе TЧеловек разумно сделать свойство Говорливость: гврРазговорчивый, гврНемой, и реализовать function Спросить: Код: pascal 1. 2. 3. 4. 5.
Здесь проверка на способность говорить уместна, поскольку это не проверка на класс, а просто свойство, влияющее на реализацию конкретного метода. Таких свойств может быть много - "Вегетарианец" (влияет на procedure Накормить) "Непьющий" (procedure Напоить), и т.д. - не лепить же по классу на все эти вещи. Другое предположение - может быть, ТС нужен базовый интерфейс в 45 членов с девятью реализациями, и наследник с еще пятью свойствами, реализованный во всех классах, кроме девятого? Подробности в студию! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2012, 11:52 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
neodddКит - это не рыба, и в жизни есть много аномалий. Например, все люди могут говорить. Но есть немые. Тогда ваш процесс общения выглядит так: if not Немой: слушать ответ. if Немой: дать карандаш и бумагу и читать ответ В процедурном программировании - именно так. В ООП-стиле же это один из основных антипаттернов, а правильное решение называется "полиморфизм". Без всяких if-ов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2012, 22:17 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
softwarerВ процедурном программировании - именно так. В ООП-стиле же это один из основных антипаттернов, а правильное решение называется "полиморфизм". Без всяких if-ов. А есть еще "разрыв шаблона" и "умение мыслить нестандартно". Вопрос, что лучше решается в каждой ситуации. Часто нет смысла городить огород, стараясь достичь "совершенства". ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 04:21 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
neodddА есть еще "разрыв шаблона" и "умение мыслить нестандартно". Конечно, есть. Только не следует забывать верифицировать решения здравым смыслом - в противном случае оное слишком часто оказывается (повторным) изобретением велосипеда с квадратными колёсами. neodddЧасто нет смысла городить огород, стараясь достичь "совершенства". Всегда есть смысл стремиться к совершенству. Вопрос в том, что совершенство обычно далеко от "самая сложная и изощрённая конструкция из возможных". Но, например, в случае топикстартера несовершенство более чем очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 04:42 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
softwarerВсегда есть смысл стремиться к совершенству. Я бы сказал, что это - антипаттерн. Совершенная программа никому не нужна, потому что стоимость ее разработки превзойдет полученную выгоду. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 05:02 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
neodddsoftwarerВсегда есть смысл стремиться к совершенству. Я бы сказал, что это - антипаттерн. Совершенная программа никому не нужна, потому что стоимость ее разработки превзойдет полученную выгоду. Вы неправильно понимаете смысл слова "совершенство". Шаблонно, я бы сказал. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 05:16 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
neodddСовершенная программа никому не нужна истину глаголите ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 11:05 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
softwarerВы неправильно понимаете смысл слова "совершенство". Шаблонно, я бы сказал. Мой взгляд на это такой: на данный момент никто не знает, что такое совершенство в программировании. Мы еще находимся на этапе наскальных рисунков. Если программные "рисунки" помогают пещерным пользователям "охотиться", то совершенно неважно как прорисованы детали "медведя". Переедем в новую "пещеру", нарисуем по-новой. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 13:28 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
neoddd, скорее не "что", а "как". Совершенство в программировании в общем то же, как и в остальной инженерной науке. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 13:46 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
Petro123Alexus_ruЧто Вы думаете по этому поводу? они правы. Оснований для рефакторинга маловато. Преимущества imho не очевидны. Я делал исключения 2-х типов: - по бизнес-логике - системные (туда код может зайти только при фатальных непредвиденных ошибках). Ну а "особый объект" очень сильно зависит от контекста реального проекта. Уже одно это : "Есть монстр интерфейс, назовем его IObject c ~50 членами." -- основание для рефакторинга. Надо разбивать на маленькие атомарные интерфейсы. И видимо им это будет трудновато сделать. Ну а если MethodThatNotUseInType9() неприменим к объекту класса Type9, то это, извините, грубая ошибка проектирования, т.к. класс Type9 не является подтипом своего предка. Что тут делать -- сказать сложно, потому что это всё завязано на семантику этих неприменимых методов. Ну, как уже сказали, где-то можно их реализовать пустыми, возвращающими пустое значение и т.п. Но где-то это видимо не прокатит. То, что ты предлагаешь сделать странно -- надо делать наоборот, выделить чистый подкласс с методами, которые используются везде, от него унаследовать подкласс с методами, которых НЕТ в Type9, и Type9 наследовать от БАЗОВОГО, но не РАСШИРЕННОГО класса. Т.е. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Но это (как сказали в теме уже) не особенно поможет, потому что всё равно надо будет проверять тип объекта. Но это уже будет шаг вперёд, нормальный дизайн, и далее вы уже сможете лечить конкретно эту проблему --- лечится применением разных паттернов проектирования, конкретно, если мне не изменяет память, визитором, или фасадом. Это уже другой вопрос, надо отдельно рассматривать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 15:10 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
neodddsoftwarerВ процедурном программировании - именно так. В ООП-стиле же это один из основных антипаттернов, а правильное решение называется "полиморфизм". Без всяких if-ов. А есть еще "разрыв шаблона" и "умение мыслить нестандартно". Вопрос, что лучше решается в каждой ситуации. Часто нет смысла городить огород, стараясь достичь "совершенства". Не в этом случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 15:12 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
neodddМой взгляд на это такой: на данный момент никто не знает, что такое совершенство в программировании. Мы еще находимся на этапе наскальных рисунков. Если программные "рисунки" помогают пещерным пользователям "охотиться", то совершенно неважно как прорисованы детали "медведя". Переедем в новую "пещеру", нарисуем по-новой. люблю такие ассоциации :) Хорошо ложится на: "Программирование, это не ремесло, а искусство" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 16:40 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
Petro123"Программирование, это не ремесло, а искусство" :) здесь как прокладывании тропинок: можно сделать ровные, выложенные плиткой тротуарчики, но в обход, потому что так красиво. В результате будет неудобно, но типа "правильно". Со временем начнется топтание газонов. А можно просто использовать простые прямые тропинки. Действительно искусство. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2012, 17:03 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
Petro123"Программирование, это не ремесло, а искусство" :) авторДействительно искусство Я и говорю - искусство. На стадии наскальных рисунков. Вот и хвалит каждый пещерный художник свой пещерный подход. А критерием настоящего совершенства является хотя бы то, что творение может пережить своего создателя :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2012, 13:09 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
neodddА критерием настоящего совершенства является хотя бы то, что творение может пережить своего создателя :)Чушь. Колесцовый замок на полтысячелетия пережил создателя, а какой-нибудь Ла-7 и жил-то всего несколько лет. Но это показатель не совершества, а исключительно скорости технического прогресса. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2012, 14:18 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
softwarerНо это показатель не совершества, а исключительно скорости технического прогресса. Жил-был хан и захотелось ему чего-то необыкновенного. Он, как-водится, призвал мастеров и один мастер сделал вещь, которая хану безумно понравилась. Хан спросил мастера, может ли он сделать еще такую же. Мастер сказал, что наверное да. Тогда хан приказал выколоть мастеру глаза, чтобы одному обладать этой уникальной вещью. Если бы хан заказал разработку ПО, он бы горько пожалел о сделаном, потому что без поддержки разработчика наслаждаться творением он бы не смог :) Как-то так совершенство меряется. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2012, 14:32 |
|
Вопрос по проектированию и наследованиям
|
|||
---|---|---|---|
#18+
neodddЕсли бы хан заказал разработку ПО, он бы горько пожалел о сделаном, потому что без поддержки разработчика наслаждаться творением он бы не смог :) Не судите по своим творениям ;-) Я вот до сих пор иногда с удовольствием запускаю диггера, пакмана, принца, мастер оф орион и ряд других программ, разработчиков которых нынче вряд ли найдёшь. neodddКак-то так совершенство меряется. Напоминаю, что Вы продолжаете путать инженерное совершенство с художественным. Что, впрочем, вполне естественно, учитывая, сколько не-инженеров набежало в программирование за деньгами. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2012, 15:36 |
|
|
start [/forum/topic.php?desktop=1&fid=33&tid=1547861]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 154ms |
0 / 0 |