Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
Привет. Пытаюсь создать вьюху и контрлолер, умеющий работать с двумя видами моделей. Вот так модель передается во вьюху: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. EditModel - базовый тип модели ExtendedEditModel - расширенный тип модели IsExtended это свойство базового класса ! Я его ввел для уменьшения числа кастингов (проверок типа if model is ExtendedEditModel). Да, я понимаю, что получается что базовый класс знает о чилде и это не очень правильно с точки зрения ООП. В данном случае мне важнее чтобы получилось работать с двумя типами моделей во вьюхе и простота кода, чем чистота ООП - полиморфизм используется лишь как средство. Во вьюхе модель описана так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Не знаю как отработает код на строке {1}. Не доходило до него еще :) PS. Во время пошаговой отладки вьюхи - модель действительно отмечается как Extended . А вот в метод контроллера она уже приходит как базовая ! а так контроллер принимает ее с вьюхи для обработки Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Как это исправить ? Как передать в метод контроллера расширенную модель ? Может нужно что-то передать в Hiden (через @Html.HiddenFor) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 11:50 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
Форма во вьюхе описана так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 11:54 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
ProBiotek, Использйте в view уже расширенную версию модели: Код: html 1. А в HttpPost методе принимайте EditExtendedModel вместо EditModel. Мы так делаем на работе, все работает. Только через интерфейсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 11:57 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
смотреть в сторону DisplayTemplate и EditTemplate, красиво и лаконично и без кастылей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 11:59 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
handmadeFromRu, Да не нужен здесь никакой EditorTemplate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 12:01 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
Axeleron, аргументируй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 12:17 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
handmadeFromRuAxeleron, аргументируй. Нечего аргментировать особо. EditorTemplate используется как шаблон для комплексных контролов и многократного переиспользования (прошу прощения за слово) в проекте. Почитай книжку по MVC - там EditorTemplates почти в самом начале разбираются. Полезная штука, кстати, очень рекомендую к использованию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 12:20 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
Axeleron А в HttpPost методе принимайте EditExtendedModel вместо EditModel. Мы так делаем на работе, все работает. Только через интерфейсы. не понял ! Так если вьюха будет работать с базовой моделью и пошлет в контроллер ее - то что в него прийдет ? Ведь в контроллере описана расширенная модель. Или по простому свойства при мапинге не заполнятся и все ? Т.е. проблемы не будет ? Фразы про интерфейсы я не понял. Каким боком их тут прикручивать ? Сейчас все основывается на полиморфизме, не понимаю чем помогут интерфейсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 12:23 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
AxeleronНечего аргментировать особо. EditorTemplate используется как шаблон для комплексных контролов и многократного переиспользования (прошу прощения за слово) в проекте. Почитай книжку по MVC - там EditorTemplates почти в самом начале разбираются. Полезная штука, кстати, очень рекомендую к использованию. и? что не так с использованием в рамках задачи ТС? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 12:34 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
ProBiotek, Ну так попробуй. Я говорил не про мастер класс, а наследованный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 12:45 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
ProBiotekФразы про интерфейсы я не понял. Каким боком их тут прикручивать ? Классы можно 'сажать' на интерфейсы. Если это, конечно, новость... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 12:46 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
Ок. Про интерфейсы в классах не знал, спасибо (сарказм ;) ). Я просто не так понял Вашу фразу. Думал фраза про интерфейсы была предложением и мне попробовать, не понял как это мне поможет. Но теперь понимаю, что фраза про интерфейсы была в контексте "у нас так сделано" а не предложением и мне так сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 12:58 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
ProBiotek, Про интерфейсы - это было просто предложение использовать хорошую практику, не более того. К твоей конкретной задаче это прямого отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 13:03 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
AxeleronProBiotek, Про интерфейсы - это было просто предложение использовать хорошую практику, не более того. К твоей конкретной задаче это прямого отношения не имеет. Сразу отмечу что я нуб, так что может Вы и правы. Но мне показалось удобным сделать через полиморфизм классов. Там все различие, между моделями, в одном свойстве. Интерфейсы то в проекте есть. И autofac используется по полной. В конструктор контроллера передается все через зависимости, как в книгах Фримана. Для вьюхи же интерфейсы, мне кажется, достаточно бесполезны - хватит классов. Модель жестко связана с контроллером 1 к 1. Если создаем контроллер то модель создается без вариантов. Тут инжектить нечего, и соотвественно интерфейсы ни к чему. Интерфейсы нужны лишь на уровне контроллера. По сути интерфейсы используются для тестов же, в основном. А вьюху можно разве юнит-тестить ? Если нет - то и не нужны интерфейсы. Мокать то нечего... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 13:48 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
ProBiotekНо мне показалось удобным сделать через полиморфизм классов. Это не полиморфизм. Пример того, что ты привел назвается наследованием. ProBiotekИнтерфейсы то в проекте есть. Это не самоцель просто иметь интерфейсы, с ними нужно уметь еще и правильно работать. А так бестолку иметь их 'шоб было'. ProBiotekДля вьюхи же интерфейсы, мне кажется, достаточно бесполезны - хватит классов. А ты попробуй использовать интерфейс в модели вьюхи... ProBiotekМодель жестко связана с контроллером 1 к 1. Если создаем контроллер то модель создается без вариантов Это в корне неверное понимание концепции MVC, да и ООП в принципе. ProBiotekИнтерфейсы нужны лишь на уровне контроллера. То же самое, см выше. Пока нет понимания зачем нужны интерфейсы, лучше вообще убрать из программы их и не тратить девелоперское время впустую. ProBiotekПо сути интерфейсы используются для тестов же, в основном. Обширное заблуждение. ProBiotekА вьюху можно разве юнит-тестить ? Можно. В общем просто поток... искореженного сознания. Без обид. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 13:58 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
AxeleronProBiotekМодель жестко связана с контроллером 1 к 1. Если создаем контроллер то модель создается без вариантов Это в корне неверное понимание концепции MVC, да и ООП в принципе. ProBiotekИнтерфейсы нужны лишь на уровне контроллера. То же самое, см выше. Пока нет понимания зачем нужны интерфейсы, лучше вообще убрать из программы их и не тратить девелоперское время впустую. Ок, согласен не полиморфизм а простое наследование тут используется конечно, что то я действительно не так обозвал :) Контроллер выполняет некие действия. Для чего у него есть экшены, принимающие конкретную модель. Причем тут интерфейсы вобще ? Чтобы протестить такой контроллер - пожалуйста, передавайте модель и проверяйте результат. Принципиально. Интерфейсы нужны тем, что менее связывают классы, чем абстрактный класс. Быстро создать реализацию интерфейса своим классом проще, чем создавать наследника от абстрактного класса. Другой пример это Linq (и linq to...), т.е. когда интерфейс используется не для простоты создания своих классов, а для написания некоего алгоритма, применимого для всех реализаций некоего интерфейса. Но почему принципиально нужно передавать интерфейсы во вьюху то ? Ведь во вьюху должна передаваться простая модель POCO. Чем он тут будет отличаться от интерфейса ? Методов нет, вызывать нечего, только поля с данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 15:30 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
ProBiotekОк, согласен не полиморфизм а простое наследование тут используется конечно, что то я действительно не так обозвал :) Так такие вещи надо знать. А то позовут на интервью и на первом же элементарном вопросе завалят. не обидно будет потраченного времени, денег на билет? :) ProBiotekКонтроллер выполняет некие действия. Для чего у него есть экшены, принимающие конкретную модель. Причем тут интерфейсы вобще ? Чтобы протестить такой контроллер - пожалуйста, передавайте модель и проверяйте результат. Вот сам себе прочиворечишь. Выше ты говорил, что интерфейсы нужны для тестирования. Ну и как ты собираешься создавать мок объект из класса? ProBiotekПринципиально. Интерфейсы нужны тем, что менее связывают классы, чем абстрактный класс. Быстро создать реализацию интерфейса своим классом проще, чем создавать наследника от абстрактного класса. Интерфейс и абстрактный класс - принципиально разные вещи и используются для разных задач. Кстати, тоже один из часто задаваемых вопросов в чем разница мажду ними. Так что очень рекомендую подтянуть базовые знания ООП. ProBiotekНо почему принципиально нужно передавать интерфейсы во вьюху то ? Ведь во вьюху должна передаваться простая модель POCO. Чем он тут будет отличаться от интерфейса ? Методов нет, вызывать нечего, только поля с данными. Значит пока рано использовать их раз нет представления о сути вещей. А вообще в данном случае - для тестирования контролера. Но вы у себя все равно не используете ТДД, так что можно пока не волноваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 15:50 |
|
||
|
Полиморфизм моделей не работает ?
|
|||
|---|---|---|---|
|
#18+
Axeleron, Да знаю я про ООП :), ну ошибся немного при написании темы. Мысли ушли в сторону полиморфизма только потому, что я хотел в одной модели, во вьюхе, хранить два вида моделей - от этого и закрутилось. Голова была занята обдумыванием самой проблемы а не Тайтла для темы, сорри :) Мой вопрос был - зачем во вьюху, передавать модель: интерфейс. Просто уж заинтриговали прям :) Интерфейс в юнит тестах используется чтобы можно было замокать что-то. Когда мок объект суть - пустышка над интерфейсом, без побочных эффектов или с заранее известными эффектами. Чтобы можно было подменить слоооожный клас реализующий интерфейс. А что мокать в модели во вьюхе мне и не ясно. Если модель суть POCO. Ну создавайте сразу эту POCO, передавайте да тестите. Толку тут от интерфейса :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 17:49 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38956262&tid=1356492]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
5ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 298ms |

| 0 / 0 |
