|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
Всем привет, помогите плиз с советом. Хочу хранить список разнородных объектов в HasSet и использовать linq для различных операций. Однако у этих разнородных объектов есть одинаковые свойства. Думаю проще объяснить на примере. Есть список(HasSet ) заданий(job) у которых есть следующие свойства Код: c# 1. 2. 3. 4. 5. 6. 7.
Заполняем весь HasSet объектами класса job и получаем HasSet<job>. Можно применять linq без проблем ко всем свойствам объектов списка. Теперь нужно добавить в этот HasSet другой объект только с 2 свойствами Код: c# 1. 2. 3. 4. 5.
и также использовать те же linq to object, как и раньше, только игнорируя объекты типа pereriv в Hasset. Что можно сделать, только будет выглядеть по костыльному. 1) Дополнить класс pereriv недостающими свойствами из job и задефолтить их+ добавить признак bool например Isjob и сделать класс pereriv полностью как job. 2) Переписать все linq запросы в 2 уровня- сначала отфильтровываем из HashSet только job, а к нему применяем уже "старый" linq запрос. Что пробовал делать: 1)Создать для классов job и pereriv общий abstract класс предок AbsClass с 2-мя свойствами strt_time и fnl_date+ MyHashset<T>:HashSet where T: AbsClass 2) Реализовать в 2-х классах общий интерфейс с теми же 2-мя свойствами и использовать в linq -запросах вместо классов их интерфейсную реализацию. Однако во всех случаях приходил к тому, что необходимо в классе pereriv доопределять все недостающие свойства до класса job, хотя в нем они не нужны. Есть ли какое-либо рациональное решение для данной ситуации? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 19:24 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
vb_subОднако во всех случаях приходил к тому, что необходимо в классе pereriv доопределять все недостающие свойства до класса job, хотя в нем они не нужны. Так и не понял чем базовый класс или интерфейс не устроили. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 21:49 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
vb_subЧто можно сделать, только будет выглядеть по костыльному. ... 2) Переписать все linq запросы в 2 уровня- сначала отфильтровываем из HashSet только job, а к нему применяем уже "старый" linq запрос. А в чем костыль? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 22:13 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
я бы на вашем месте задумался о том, что я делаю не так, если у меня возникают подобные сложности. класс может наследовать множество интерфейсов. то есть можно в интерфейсе определить 1 поле, в другом другое и дёргать их через эти интерфейсы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 23:17 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
vb_sub, - если отделять в коллекциях по признаку, то врооде linq...where есть. - если использовать список для чего то полезного, тогда интерфейс не нужен для полиморфизма. Наследование нужно. ООП. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 08:23 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
Roman Mejtes, не так я делаю то, что хочу уместить в одном списке хоть и унаследованные от одного предка класса, но все таки разные. В общем переделал следующим образом Структура классов: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Программа Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 11:37 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
vb_sub, В наследниках нужно повторить методы базового. Наследник РАСШИРЯЕТ функционал ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 11:43 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
а зачем тут HashSet? Вы создаете ссылочные типы данных, то есть классы. Шек класса, если он явно не определен, это указатель на объект. То есть для всех созданных объектов, хеш всегда будет разный. Шеб будет одинаковый, только если вы попытаетесь добавить 2 раза один и тот же инстанс (объект). Но если создать 2 разных объекта с одинаковыми полями\свойствами, то их хеши будут отличаться. возникает вопрос, нафига тогда хешсет? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 11:51 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
Шек = хеш, меня немного плющит ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 11:53 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
Petro123, я вынес в базовый класс все общие свойства, чтобы избежать их дублирования в наследниках. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 12:01 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
Roman Mejtes, HashSet выбрал только из принципа удовлетворения минимальной требуемой функциональности- вроде как побыстрее чем List. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 12:03 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
vb_subPetro123, я вынес в базовый класс все общие свойства, чтобы избежать их дублирования в наследниках. Не будет полиморфизма. Дело ваше. vb_subпобыстрее ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 12:27 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 12:38 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
vb_sub https://stackoverflow.com/questions/150750/hashset-vs-list-performancePetro123, У программистов поговорка - не оптимизируй раньше времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 12:42 |
|
Посоветуйте по архитектуре классов
|
|||
---|---|---|---|
#18+
vb_subи также использовать те же linq to object, как и раньше, только игнорируя объекты типа pereriv в Hasset. Что можно сделать, только будет выглядеть по костыльному. по костыльному не будет, если игнорировать так: hashSet.OfType<Job>() если проблема заключается только в том, что хранить надо в одном хешсете, а linq выполнять только над Job - надо делать враппер над хешсетом. Который, будет предоставлять дополнительно отфильтровывать ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 13:02 |
|
|
start [/forum/topic.php?fid=20&fpage=39&tid=1399689]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 312ms |
total: | 465ms |
0 / 0 |