Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Много раз уже перетиралось делать/не делать тестовые задания. Я, вот, сделал, искал на удаленку (постоянку) ведушим программистом. Ответа не получил. Если кому-то нечего делать, гляньте, пожалуйста, покритикуйте. Хоть какой-то профит от этого задания хочу получить https://github.com/fiqwenbv/ParrotWings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2017, 20:11 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskЗдравствуйте. Много раз уже перетиралось делать/не делать тестовые задания. Я, вот, сделал, искал на удаленку (постоянку) ведушим программистом. Ответа не получил. Если кому-то нечего делать, гляньте, пожалуйста, покритикуйте. Хоть какой-то профит от этого задания хочу получить https://github.com/fiqwenbv/ParrotWings Задание-то озвучьте. А то множество не понятно зачем придуманных интерфейсов, репозитории, что возвращают и доменные объекты и DTO, использование на кой-то черт Session. И не написанные тесты :) А они бы помогли обозначить ошибки в проектировании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 10:02 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAtest_taskЗдравствуйте. Много раз уже перетиралось делать/не делать тестовые задания. Я, вот, сделал, искал на удаленку (постоянку) ведушим программистом. Ответа не получил. Если кому-то нечего делать, гляньте, пожалуйста, покритикуйте. Хоть какой-то профит от этого задания хочу получить https://github.com/fiqwenbv/ParrotWings Задание-то озвучьте. А то множество не понятно зачем придуманных интерфейсов, репозитории, что возвращают и доменные объекты и DTO, использование на кой-то черт Session. И не написанные тесты :) А они бы помогли обозначить ошибки в проектировании. задание тут https://github.com/fiqwenbv/ParrotWings/wiki ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 10:07 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAрепозитории, что возвращают и доменные объекты и DTO это не правильно? почему? как правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 10:14 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskskyANAрепозитории, что возвращают и доменные объекты и DTO это не правильно? почему? как правильно? По определению репозиторий возвращает по запросу и сохраняет Business (Domain) Entity. Операции с DTO - это уже нарушение шаблона и принципа единтсвенности ответсвенности. Также вот это не репозиторий: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. Если есть какие-то сохраняемые настройки, то ими и надо оперировать. То есть репозиторий должен принимать на вход SettingCriteria и возвращать некий Setting. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 11:38 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAtest_taskЗдравствуйте. Много раз уже перетиралось делать/не делать тестовые задания. Я, вот, сделал, искал на удаленку (постоянку) ведушим программистом. Ответа не получил. Если кому-то нечего делать, гляньте, пожалуйста, покритикуйте. Хоть какой-то профит от этого задания хочу получить https://github.com/fiqwenbv/ParrotWings Задание-то озвучьте. А то множество не понятно зачем придуманных интерфейсов, репозитории, что возвращают и доменные объекты и DTO , использование на кой-то черт Session. И не написанные тесты :) А они бы помогли обозначить ошибки в проектировании. для этого примера можно, наверное, вынести все джоины в DataService, и все проекции для DTO строить там. Но, если заменить реализацию в NH на основе ICriteria, так сделать уже не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2017, 16:20 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, зачем Вы вообще заморочились с NH, этого же в задании не требовалось? А вот пункт "10. Mobile application" отсутсвует в решении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2017, 16:44 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAtest_task, зачем Вы вообще заморочились с NH, этого же в задании не требовалось ? А вот пункт "10. Mobile application" отсутсвует в решении . сначала сделал минимум. ответа все не было. дальше превратил этот проект в базу для экспериментов, которые меня в текущий момент интересовали. основной из них - это как разделить без "диффузии" одного в другой DataService и Repository мобильное не надо - задание общее для нескольник позиций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2017, 16:52 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskskyANAtest_task, зачем Вы вообще заморочились с NH, этого же в задании не требовалось ? А вот пункт "10. Mobile application" отсутсвует в решении . сначала сделал минимум. ответа все не было. дальше превратил этот проект в базу для экспериментов, которые меня в текущий момент интересовали. основной из них - это как разделить без "диффузии" одного в другой DataService и Repository мобильное не надо - задание общее для нескольник позиций. по работе сейчас приходится заниматься, в основном, с NH (ICriteria) и легковесными ОРМ аля raw sql. вот и прицел от этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2017, 17:07 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskЗдравствуйте. Много раз уже перетиралось делать/не делать тестовые задания. Я, вот, сделал, искал на удаленку (постоянку) ведушим программистом. Ответа не получил. Если кому-то нечего делать, гляньте, пожалуйста, покритикуйте. Хоть какой-то профит от этого задания хочу получить https://github.com/fiqwenbv/ParrotWings Не жирновато для тестового задания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2017, 11:45 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
А мне понравилось тестовое. Пока сделаешь, можно за одно и программирование выучить. А сколько времени ушло на выполнение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2017, 13:56 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
внес исправления согласно рекомендациям skyANA: https://github.com/fiqwenbv/ParrotWings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 09:58 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
написал несколько тестов https://github.com/fiqwenbv/ParrotWings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 20:37 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskнаписал несколько тестов https://github.com/fiqwenbv/ParrotWings В первые что-ли тесты пишете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 00:06 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAtest_taskнаписал несколько тестов https://github.com/fiqwenbv/ParrotWings В первые что-ли тесты пишете?А что с ними не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 14:09 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
подниму. может снова кому-то делать нечего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 15:07 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, Да уже можно было написать за это время. Гугл чтоли отключили? Может сам попробуешь, и задашь конкретные вопросы, если что-то не получается? Откуда вообще такая уверенность или надежда, что каким-то людям в этой жизни больше заняться нечем, кроме как делать чьи-то чужие унылые задания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 15:20 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostt кроме как делать чьи-то чужие унылые задания? А с чего ты решил, что он просит _сделать_ задание? Он просит покритиковать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 19:46 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Агнец за бортомhVostt кроме как делать чьи-то чужие унылые задания? А с чего ты решил, что он просит _сделать_ задание? Он просит покритиковать. Да та же фигня. Критикуешь? Значит объясняй как надо, как было бы лучше, как правильно. А там вообще всё настолько уныло, что не то что на ведущего не тянет, с натяжкой на младшего джуниора самый максимум. Это неплохо, чего-то не знать в начале карьеры. Но по этой теме уже столько информации, что стыдно тупо копировать заезженный шаблон, совершенно не понимая что это и для чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 22:12 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Вот на что бы я с удовольствием посмотрел, это на пример SOLID-ного решения с разделением модели доступа к данным на читателей/писателей, с агрегатами доменной модели, с сервисами бизнес-логики, шиной событий и адекватной обвязкой с эффективным выхлопом от применения ООП и статической типизации. Вот такое ещё бы потянуло на ведущего. А то унылые репозитории, DTO, какие-то дата сервисы, которые к тому же весьма далеки от того, чем они должны по идее являться. Как тут критиковать? Скажешь, это у тебя не репозиторий. А что тогда репозиторий? Давай объясняй, разъясняй, учи... Другое дело конкретные вопросы, целенаправленные. Какие-то попытки разобраться, а не тупо скопировать. Вот это уже интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 22:24 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttВот на что бы я с удовольствием посмотрел, это на пример SOLID-ного решения с разделением модели доступа к данным на читателей/писателей, с агрегатами доменной модели, с сервисами бизнес-логики, шиной событий и адекватной обвязкой с эффективным выхлопом от применения ООП и статической типизации. Вот такое ещё бы потянуло на ведущего. В тестовом задании? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2017, 13:18 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttВот на что бы я с удовольствием посмотрел, это на пример SOLID-ного решения с разделением модели доступа к данным на читателей/писателей, с агрегатами доменной модели, с сервисами бизнес-логики, шиной событий и адекватной обвязкой с эффективным выхлопом от применения ООП и статической типизации. Вот такое ещё бы потянуло на ведущего. А то унылые репозитории, DTO, какие-то дата сервисы, которые к тому же весьма далеки от того, чем они должны по идее являться. Как тут критиковать? Скажешь, это у тебя не репозиторий. А что тогда репозиторий? Давай объясняй, разъясняй, учи... Другое дело конкретные вопросы, целенаправленные. Какие-то попытки разобраться, а не тупо скопировать. Вот это уже интересно. ок. а можно, если, всеже, делать нечего, по-конкретней. что, например, не так с репозиторием (skyANA обозначил нарушения, я их устранил)? зачем тут "агрегаты доменной модели" (тут разве они могут быть?)? и шина событий? и зачем тут "читатели/писатели". это конечно, уже выходит за рамки тестового, в том числе, этого задания. но было бы интересно услышать Вашу критику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2017, 17:07 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttАгнец за бортомпропущено... А с чего ты решил, что он просит _сделать_ задание? Он просит покритиковать. Да та же фигня. Критикуешь? Значит объясняй как надо, как было бы лучше, как правильно. А там вообще всё настолько уныло, что не то что на ведущего не тянет, с натяжкой на младшего джуниора самый максимум . Это неплохо, чего-то не знать в начале карьеры. Но по этой теме уже столько информации, что стыдно тупо копировать заезженный шаблон, совершенно не понимая что это и для чего. а что имено? Вы, как я понимаю, говорите это с позиции своего опыта. И, наверняка, там есть видение "исправить 1, 2, 3...". можно это "1, 2, 3"? крупными мазками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2017, 17:14 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskок. а можно, если, всеже, делать нечего, по-конкретней. что, например, не так с репозиторием (skyANA обозначил нарушения, я их устранил)? зачем тут "агрегаты доменной модели" (тут разве они могут быть?)? и шина событий? и зачем тут "читатели/писатели". это конечно, уже выходит за рамки тестового, в том числе, этого задания. но было бы интересно услышать Вашу критику. Затем, чтобы продемонстрировать ваши способности в проектировании архитектуры информационной системы с прицелом на развитие и поддержку. Ну это к вопросу, что лично мне было бы интересно увидеть. test_taskа что имено? Вы, как я понимаю, говорите это с позиции своего опыта. И, наверняка, там есть видение "исправить 1, 2, 3...". можно это "1, 2, 3"? крупными мазками Как будет реализована фильтрация данных с клиента? По методу на каждый чих в DataService? Где реализована безопасность доступа к данным? Там же в сервисах на уровне обычных пользовательских фильтров? Почему Domain-ом обозваны обычные транспортные классы для ORM? В каком же месте это Domain? Очень странная обработка ошибок. Код: c# 1. Почему бы тогда не определить свой тип исключения? Надо всё время помнить вот этот неочевидный, не расширяемый контракт? Зачем дублировать интерфейсы репозиториев? Почему репозитории возвращают как DTO, так и «domain» классы? Почитайте что такое репозиторий. Код: c# 1. 2. ужасно тупо Код: c# 1. 2. 3. 4. 5. 6. 7. 8. Возвращать надо или IEnumerable, или IReadOnlyCollection/List, а не изменяемый список. Create возвращает какой-то decimal. Рыщем в имплементации, выясняем, что это какой-то там баланс. Очуметь. В то же время GetNew возвращает какой-то объект транзакции... или погодите-ка? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. это если нам повезёт, однако. Чё к чему вообще? Косяков навалом. Вы сами-то их видите? Если нет, то у меня очень печальные новости для вас... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 00:04 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Агнец за бортомВ тестовом задании? Если у человека есть желание и амбиции занять роль ведущего разработчика в серьёзной компании, то да. А судя по интервью, которые я провожу, абсолютное большинство кандидатов проходят собеседование на отъе...сь. Больше половины не готовятся вообще. Даже если на 100% очевидно, что будут спрашивать, написано чёрным по белому в вакансии. Даже про это не почитают. Хотя бы поверхностно. Поэтому можно сказать, накипело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 00:06 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Агнец за бортомВ тестовом задании? Если у человека есть желание и амбиции занять роль ведущего разработчика в серьёзной компании, то да. А судя по интервью, которые я провожу, абсолютное большинство кандидатов проходят собеседование на отъе...сь. Больше половины не готовятся вообще. Даже если на 100% очевидно, что будут спрашивать, написано чёрным по белому в вакансии. Даже про это не почитают. Хотя бы поверхностно. Поэтому можно сказать, накипело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 00:07 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, очень все не однозначно с самим заданием. вы можете описать архитектуру, идею, которую вы заложили в реализацию? как оно работает? у нас типа финансовая система, поэтому я как ведущий программист подумал бы о следующих вещах: 1. вход пользователя - в задании нет никаких требований по безопасности, возможно для упрощения, но я как минимум описал бы свои мысли по этому поводу - например шифрование пароля, двухфакторная аутентификация 2. отложенность транзакций - вы замечали, что деньги на межбанковские переводы у вас с банковского счета не списываются в выходные дни? пишет - заблокировано средств столько-то. в задании конечно есть ограничение - что это какая-то внутренняя система, но я бы подумал о расширении - например подключении внешних платежных систем и банковский счетов 3. производительность - как вы собираетесь распараллеливать обработку транзакций? возможно нужна очередь в базе данных или MQ 4. логирование - пользователи очень очень преочень беспокоятся за свои деньги, даже за одну копейку - как вы собираетесь обеспечить нужный уровень логирования ошибок, событий, чтобы в будущем разобраться почему деньги исчезли или ушли не туда? 5. отказоустойчивость - как вы собираетесь решать эту проблему на клиенте, на сервере? да хотя бы потеря сети? или превышение таймаута запроса 6. устойчивость к хакерским атакам - например насколько легко подделать данные, отправить их на сервер, чтобы списалось больше денег или ушло не тому человеку? 7. в задании было что-то про уведомления пользователей чуть ли не на каждый чих - опять же это отдельная тема как по расширению (куда уведомлять? на мыло, на мобильник, пуш-уведомление?), так и по производительности (пользователей много, уведомлений еще больше, как минимум раза в два), а так же по способу (опрашиваем сервер или подписываемся на уведомления и сервер шлет на клиенты) 8. требование RESTfull - в текущей реализации это не совсем RESTfull, но я не уверен - понимают ли постановщики тестового задания этот термин в полной мере. вот хорошая статья https://habrahabr.ru/post/319984 9. я не знаком с мобильной разработкой, но слышал, что там есть особенности по аутентификации и авторизации вот только после того, как вы обдумаете и распишите эти вопросы (кстати это будет и некая документация) - сможете приступить к технической реализации - это выбор технологий и все те самые паттерны, солиды, сервисы, репозитории и т.п. и это уже будет совсем другая история ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 09:18 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
а вот тут можете почитать про эволюцию кода от репозиториев до CQRS http://blog.byndyu.ru/2014/07/command-and-query-responsibility.html и это было написано три года назад ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 09:26 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttАгнец за бортомВ тестовом задании? Если у человека есть желание и амбиции занять роль ведущего разработчика в серьёзной компании, то да. Интересно, когда дизайнера Audi в KIA переманивали - его тоже попросили "а нарисуй-ка нам дЕзайн крутой тачки! У тебя 20 минут, время пошло" hVosttДаже если на 100% очевидно, что будут спрашивать, написано чёрным по белому в вакансии. Даже про это не почитают. Какой смысл спрашивать на собеседовании что-то, что можно прочитать перед ним? Цена таким знаниям? Какой-то, извини, совок. Если какие-то знания можно приобрести за 20 минут, то какая разница - когда это будет сделано до или после? Мне кажется, акцент стоит делать на том, что не приобретается за 5 минут гугления. Иначе, ведущий разработчик в серьезной компании ничем не отличается от "свободная-касса". Но, возможно, мне только кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 12:10 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Агнец за бортом, Вы реально не понимаете, зачем на собеседованиях спрашивать то, что поможет понять, а подходит человек под требования, изложенные в вакансии, или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 14:18 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
И что Вы будете гуглить за 5 минут, если в требованиях к примеру опыт оптимизации работы с БД и я Вас попрошу о нём рассказать? Чужой опыт будете гуглить и потом мне на собеседовании пересказывать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 14:23 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAАгнец за бортом, Вы реально не понимаете, зачем на собеседованиях спрашивать то, что поможет понять, а подходит человек под требования, изложенные в вакансии, или нет? Я не понимаю, зачем ожидать от соискателя, чтобы он что-то "почитал" по теме перед собеседованием. Цена таким знаниям - ноль. Если он в теме, то и "освежать" знания не надо, если не в теме, то "беглый просмотр" не поможет. И принимать решение о найме на основании вышеизложенного странно. Так понятней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 15:13 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Агнец за бортомИнтересно, когда дизайнера Audi в KIA переманивали - его тоже попросили "а нарисуй-ка нам дЕзайн крутой тачки! У тебя 20 минут, время пошло" Без понятия. Не вижу причин фантазировать на эту тему. Агнец за бортомКакой смысл спрашивать на собеседовании что-то, что можно прочитать перед ним? Цена таким знаниям? Какой-то, извини, совок. Если какие-то знания можно приобрести за 20 минут, то какая разница - когда это будет сделано до или после? В вакансии обычно написано, какими умениями и знаниями должен обладать человек, который нужен. На собеседовании я обязательно об этом спрошу, и мы поговорим об этом. И всё станет ясно. А ты несёшь какую-то бессвязную ахинею. О чём я по-твоему должен спрашивать, если не о том, что заявлено в вакансии? Агнец за бортомМне кажется, акцент стоит делать на том, что не приобретается за 5 минут гугления. Т.е. надо написать в вакансии одно, а спрашивать другое? Ты в своём вообще уме? Собеседование это не экзамены, это не тестирование, это беседа. В процессе беседы всё прекрасно раскрывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 18:45 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Агнец за бортомЯ не понимаю, зачем ожидать от соискателя, чтобы он что-то "почитал" по теме перед собеседованием. Цена таким знаниям - ноль. Если он в теме, то и "освежать" знания не надо, если не в теме, то "беглый просмотр" не поможет. Речь вообще не об этом шла. Я сказал, что отдельные кандидаты даже не пытаются подготовиться. — Моего знакомого менты приняли за грибы. — Как можно принять человека за грибы? Совсем не похоже ведь. — Настя... — Ну что Ты прям вот как Настя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 18:50 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Агнец за бортомskyANAАгнец за бортом, Вы реально не понимаете, зачем на собеседованиях спрашивать то, что поможет понять, а подходит человек под требования, изложенные в вакансии, или нет? Я не понимаю, зачем ожидать от соискателя, чтобы он что-то "почитал" по теме перед собеседованием. Цена таким знаниям - ноль. Если он в теме, то и "освежать" знания не надо, если не в теме, то "беглый просмотр" не поможет. И принимать решение о найме на основании вышеизложенного странно. Так понятней? Подготовился - это не что-то там "почитал", а ознакомился с профилем компании, требованиями, прикинул примерный круг задач, что будут спрашивать. Выписал себе на листочек, что хотел бы узнать, спросить, уточнить на собеседовании. А то спрашиваешь: Вы заходили на наш сайт, понимаете чем мы занимаемся, какой у нас продукт? В ответ что-то там мычат. И встаёт вопрос, а человек вообще хочет именно у нас работать, или ему по фигу где, с кем и над чем он будет трудиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 19:00 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAПодготовился - это не что-то там "почитал", а ознакомился с профилем компании, требованиями, прикинул примерный круг задач, что будут спрашивать. Выписал себе на листочек, что хотел бы узнать, спросить, уточнить на собеседовании. Как минимум соотнёс свои знания и опыт с тем, что требуется. Если что, освежил. Это огромный жирный минус для человека, если на сосебедовании — «это я конечно знаю, да подзабыл» (хотя это написано в вакансии чёрным по белому), да и вообще зачем это нужно и начинает в чём-то переубеждать, типа ща так не делают, это не используют, всё везде уже давно по-другому... Зачем пришёл, спрашивается? А вдруг повезёт? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 19:06 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAА то спрашиваешь: Вы заходили на наш сайт, понимаете чем мы занимаемся, какой у нас продукт? В ответ что-то там мычат. И встаёт вопрос, а человек вообще хочет именно у нас работать, или ему по фигу где, с кем и над чем он будет трудиться? Плюс, если человек предварительно поинтересовался, куда он собирает предложить свою кандидатуру, особенно если это компания с публичными продуктами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 19:08 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttАгнец за бортомЯ не понимаю, зачем ожидать от соискателя, чтобы он что-то "почитал" по теме перед собеседованием. Цена таким знаниям - ноль. Если он в теме, то и "освежать" знания не надо, если не в теме, то "беглый просмотр" не поможет. Речь вообще не об этом шла. hVostt Даже если на 100% очевидно, что будут спрашивать, написано чёрным по белому в вакансии. Даже про это не почитают. Хотя бы поверхностно. А о чем шла речь, хвост? Опять намемекал, впрочем, как обычно, а теперь юлишь. Ты не баба? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 19:46 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Агнец за бортомhVosttпропущено... Речь вообще не об этом шла. hVostt Даже если на 100% очевидно, что будут спрашивать, написано чёрным по белому в вакансии. Даже про это не почитают. Хотя бы поверхностно. А о чем шла речь, хвост? Опять намемекал, впрочем, как обычно, а теперь юлишь. Ты не баба? Почему юлит? Ты его понял на свой лад, обычное дело. Но вроде он развернул уже свою мысль, чтобы стало понятнее о чём он. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 19:55 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Агнец за бортомА о чем шла речь, хвост? Опять намемекал, впрочем, как обычно, а теперь юлишь. Ты не баба? Ты сделал в корне неправильный и очень примитивный вывод, основанный на своих смешных домыслах, а не на моих словах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 20:04 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttПочему Domain-ом обозваны обычные транспортные классы для ORM ? В каком же месте это Domain? Переименовал сборку ParrotWings.Domain в ParrotWings.Entity, класс BaseDomain в BaseEntity. Хотя, вряд ли это сильно на что-то повлияет. А что Вы понимаете под "обычные транспортные классы для ORM"? hVosttПочему репозитории возвращают как DTO, так и «domain» классы? Почитайте что такое репозиторий. в каком месте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 20:30 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostt Код: c# 1. 2. ужасно тупо тут просто баг (u.UserId == ...). а что тут "ужасно тупого"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 22:36 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskhVostt Код: c# 1. 2. ужасно тупо тут просто баг (u.UserId == ...). а что тут "ужасно тупого"?вот эти кишки GetList().FirstOrDefault(u => u.Id == userId); GetList().FirstOrDefault(u => u.Id == correspondentUserId) должны быть запрятаны в репозитарий, а не торчать наружу, метод должен возвращать данные, с которыми уже ничего не нужно делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 22:51 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskhVostt Код: c# 1. 2. ужасно тупо тут просто баг (u.UserId == ...). а что тут "ужасно тупого"? В тестовом задании хотелось бы видеть полноценную реализацию GetOne, что на вход принимает Criteria. И которую при желании легко можно декорировать к примеру кэшом. А то ведь не видно особого толка от интерфейсов и инъекций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 22:59 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Тогда класс будет удовлетворять принципу открытости/закрытости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 23:02 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
А реализация клиентских транзакций через IInterceptionBehavior меня вообще удивила. Сразу встаёт вопрос: Вы разве не знаете, что и EF, и NHibernate реализуют шаблон Unit of Work? Ну и открывать транзакцию в рамках текущего соединения перед вызовом каждого метода и завершать сразу же после выполнения метода... А завтра понадобится три метода вызывать в рамках одной транзакции, что будете делать? Вообщем сложилось впечатление, что Вы попытались в решение запихать всё, о чём слышали, но толком не использовали: и паттерны, и АОП, и рефлексию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 00:01 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskА что Вы понимаете под "обычные транспортные классы для ORM"? Классы, удовлетворяющие условиям ORM, для того чтобы вытаскивать данные из таблиц в объекты классов (на что намекает аббревиатура ORM), и отслеживать изменения для формирования INSERT/UPDATE при вызове SaveChanges. Если говорить о домене, то это уже из области DDD, требованиям которого entity-классы EF и NH не удовлетворяют, так как эти классы должны обладать конструкторами без параметров, что приводит к разлому инкапсуляции. test_taskв каком месте? В каком месте почитать? Репозиторий объектов типа А должен работать только с объектами типа А, а не А, АDto, АHZChto... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 07:11 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAВообщем сложилось впечатление, что Вы попытались в решение запихать всё, о чём слышали, но толком не использовали: и паттерны, и АОП, и рефлексию. Больше похоже на не удачное копирование какого-то другого проекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 07:20 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostt Репозиторий объектов типа А должен работать только с объектами типа А, а не А, АDto, АHZChto...То есть если, например, репозиторий А должен произвести операцию не только с объектом А, но и со связанными с ним объектами B и С, то эти манипуляции все равно нужно выносить в соответсвующие репозитории? Даже если эти манипуляции в отрыве от операции А вообще не применяются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 08:28 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAА завтра понадобится три метода вызывать в рамках одной транзакции, что будете делать? test_task вот, кстати, раз уж используете NHibernate - если при этом использовать Castle Windsor, то там есть уже готовая NHibernateFacility и AutoTx - вешаешь атрибут транзакции на публичный метод класса - и вперед, поддерживает вложенные транзакции и вложенные методы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 09:08 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyhVostt Репозиторий объектов типа А должен работать только с объектами типа А, а не А, АDto, АHZChto...То есть если, например, репозиторий А должен произвести операцию не только с объектом А, но и со связанными с ним объектами B и С, то эти манипуляции все равно нужно выносить в соответсвующие репозитории? Даже если эти манипуляции в отрыве от операции А вообще не применяются? а что за манипуляции вы имеете ввиду? например у вас DDD, есть Entity, у нее Value Object, то репозиторий должен работать только с Entity, будет IRepository<TEntity> и вот там внутри он будет раскладывать это допустим по двум таблицам в БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 09:14 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
а насчет классов DDD и ORM - я как-то видел в одном проекте решение - классы DDD с логикой очень хитрыми и сложными маппингами гибернейта раскладывались в таблицы, без промежуточных, приближенных к таблицам классов ORM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 09:21 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyhVostt Репозиторий объектов типа А должен работать только с объектами типа А, а не А, АDto, АHZChto...То есть если, например, репозиторий А должен произвести операцию не только с объектом А, но и со связанными с ним объектами B и С, то эти манипуляции все равно нужно выносить в соответсвующие репозитории? Даже если эти манипуляции в отрыве от операции А вообще не применяются? Связанные каким образом? Агрегация, ассоциация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 09:33 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
17-77skyANAА завтра понадобится три метода вызывать в рамках одной транзакции, что будете делать? test_task вот, кстати, раз уж используете NHibernate - если при этом использовать Castle Windsor, то там есть уже готовая NHibernateFacility и AutoTx - вешаешь атрибут транзакции на публичный метод класса - и вперед, поддерживает вложенные транзакции и вложенные методы В задании требуется EF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 09:35 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyТо есть если, например, репозиторий А должен произвести операцию не только с объектом А, но и со связанными с ним объектами B и С, то эти манипуляции все равно нужно выносить в соответсвующие репозитории? Даже если эти манипуляции в отрыве от операции А вообще не применяются? Я имел в виду: Product, ProductDto, ProductDto2... Это не задача репозитория, обрабатывать какие-то там DTO. Если в СУБД хранится сущность, представленная entity-классом Product, то репозиторий должен работать только с ним, а с ворохом доп. классов, существующих для поддержки клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 10:49 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
17-77а насчет классов DDD и ORM - я как-то видел в одном проекте решение - классы DDD с логикой очень хитрыми и сложными маппингами гибернейта раскладывались в таблицы, без промежуточных, приближенных к таблицам классов ORM Видел такое использование. Это возможно, но не айс. Поддерживать очень тяжело. Не предназначен он для такого, просто коммьюните усиленно просит, они приделываеют костыль за костылём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 10:52 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostt test_taskв каком месте? В каком месте почитать? Репозиторий объектов типа А должен работать только с объектами типа А , а не А, АDto, АHZChto... я про в каком месте в моем решении это не так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 10:53 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
17-77вот, кстати, раз уж используете NHibernate - если при этом использовать Castle Windsor, то там есть уже готовая NHibernateFacility и AutoTx - вешаешь атрибут транзакции на публичный метод класса - и вперед, поддерживает вложенные транзакции и вложенные методы to 17-77 мотивация такая: и EF, и NH умеет работать с "родным" TransactionScope. Каждый раз писать Код: c# 1. 2. 3. 4. 5. выглядит копипастом. Поэтому чз атрибут. to skyANA насчет реализованного в EF и NH UofW: он используется чз Код: c# 1. 2. 3. 4. Или надо было явно создать класс MyUofW? такое решение мне не видится лучше/хуже, больше вкусовщина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 11:23 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, по тестам - основная функция - это создание транзакции, я бы сделал так: примерный набор юнит тестов: 1. обычная отправка без ошибок 2. отправка с неверным ид получателя 3. отправка нулевой, отрицательной сумм 4. отправка суммы большей, чем есть у отправителя на счету причем тестировать надо класс(ы) с чистой бизнес логикой - на входе дто, на выходе другое дто или ентити, т.е. мока на слой доступа к данным не должно быть - тут надо подумать как написать такой код интеграционный тест (веб-апи -> БД): 1. отправка кривых данных в веб-апи в метод создания транзакции - все должно корректно перехватываться, не допускать sql инъекций, возвращать коды ошибок (хотя тут еще надо подумать - это можно разбить на юнит тесты) 2. имитация ошибки таймаута/отсутствия сети на различных этапах создания транзакции - все должно откатываться корректно и деньги не должны теряться нагрузочный тест (веб-апи -> БД): 1. натравить 10-100-1000-... запросов на ваш веб-апи метод и посмотреть когда упадет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 11:23 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
17-77test_task, по тестам - основная функция - это создание транзакции, я бы сделал так: примерный набор юнит тестов: 1. обычная отправка без ошибок 2. отправка с неверным ид получателя 3. отправка нулевой, отрицательной сумм 4. отправка суммы большей, чем есть у отправителя на счету причем тестировать надо класс(ы) с чистой бизнес логикой - на входе дто, на выходе другое дто или ентити, т.е. мока на слой доступа к данным не должно быть - тут надо подумать как написать такой код интеграционный тест (веб-апи -> БД): 1. отправка кривых данных в веб-апи в метод создания транзакции - все должно корректно перехватываться, не допускать sql инъекций, возвращать коды ошибок (хотя тут еще надо подумать - это можно разбить на юнит тесты) 2. имитация ошибки таймаута/отсутствия сети на различных этапах создания транзакции - все должно откатываться корректно и деньги не должны теряться нагрузочный тест (веб-апи -> БД): 1. натравить 10-100-1000-... запросов на ваш веб-апи метод и посмотреть когда упадет спасибо за совет я бы тоже так сделал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 11:25 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task to 17-77 мотивация такая: и EF, и NH умеет работать с "родным" TransactionScope. Каждый раз писать Код: c# 1. 2. 3. 4. 5. выглядит копипастом. Поэтому чз атрибут. да, это я понял, я к тому, что в Castle есть уже готовая штука для Nhibernate, как раз атрибутом, и поддерживает вложенные транзакции и вложенные методы. можно поискать аналогичные библиотеки для Unity/EF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 11:30 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAПодготовился - это не что-то там "почитал", а ознакомился с профилем компании, требованиями, прикинул примерный круг задач, что будут спрашивать. Выписал себе на листочек, что хотел бы узнать, спросить, уточнить на собеседовании. По тем же преславутым юнит-тестам нет единого мнения не то что в разных, часто оно расходится у проводящих собеседование, если их больше чем один. skyANAА то спрашиваешь: Вы заходили на наш сайт, понимаете чем мы занимаемся, какой у нас продукт? В ответ что-то там мычат. И встаёт вопрос, а человек вообще хочет именно у нас работать, или ему по фигу где, с кем и над чем он будет трудиться? Всяк кулик хвалит свое болото. Нафига мне вникать в ваш сайт, если почти все проекты "инновационные и неповторимые", а суть, в плане применяемых технологий, близнецы-братья. Даже хвалебные тексты маркетинг копирует с других хвалебных текстов скоммунизженных в сети. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 11:57 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task to 17-77 мотивация такая: и EF, и NH умеет работать с "родным" TransactionScope. Каждый раз писать Код: c# 1. 2. 3. 4. 5. выглядит копипастом. Поэтому чз атрибут. Такие штуки можно прятать так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. Можно впихнуть еще например логгирование и обработку ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 12:06 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskя про в каком месте в моем решении это не так После коммита 26 числа, вижу, что уже по этому вопросу всё так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 13:40 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВПо тем же преславутым юнит-тестам нет единого мнения не то что в разных, часто оно расходится у проводящих собеседование, если их больше чем один. Что именно расходится? Использовать или не использовать? 100% покрытие, или пофигу? От уровня профессионализма, с которым работает компания, это зависит. ЕвгенийВВсяк кулик хвалит свое болото. Нафига мне вникать в ваш сайт, если почти все проекты "инновационные и неповторимые", а суть, в плане применяемых технологий, близнецы-братья. Даже хвалебные тексты маркетинг копирует с других хвалебных текстов скоммунизженных в сети. Если ты не вникал, значит и соискание у тебя соответствующее. На отъ..сь. Либо ты настолько крутой и уникальный, что тебе везде рады. Либо лень. Либо самомнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 13:41 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВskyANAПодготовился - это не что-то там "почитал", а ознакомился с профилем компании, требованиями, прикинул примерный круг задач, что будут спрашивать. Выписал себе на листочек, что хотел бы узнать, спросить, уточнить на собеседовании. По тем же преславутым юнит-тестам нет единого мнения не то что в разных, часто оно расходится у проводящих собеседование, если их больше чем один. К чему это сказано? Закончите мысль, если не трудно. ЕвгенийВskyANAА то спрашиваешь: Вы заходили на наш сайт, понимаете чем мы занимаемся, какой у нас продукт? В ответ что-то там мычат. И встаёт вопрос, а человек вообще хочет именно у нас работать, или ему по фигу где, с кем и над чем он будет трудиться? Всяк кулик хвалит свое болото. Нафига мне вникать в ваш сайт, если почти все проекты "инновационные и неповторимые", а суть, в плане применяемых технологий, близнецы-братья. Даже хвалебные тексты маркетинг копирует с других хвалебных текстов скоммунизженных в сети. То есть вариант "по фигу где, с кем и над чем он будет трудиться", хорошо. Ставится отметка "минус" в листочке :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 14:23 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAТо есть вариант "по фигу где, с кем и над чем он будет трудиться", хорошо. Ставится отметка "минус" в листочке :) Работодатель всегда хочет, что-бы работника в первою очередь интересовала сама работа, но по статистике (не помню где видел) основная причина смены работы это зп :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 18:25 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAtest_taskпропущено... тут просто баг (u.UserId == ...). а что тут "ужасно тупого"? В тестовом задании хотелось бы видеть полноценную реализацию GetOne, что на вход принимает Criteria . имеется в виду что-то такое? Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 22:45 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskимеется в виду что-то такое? Код: c# 1. Не. Что-то такое: Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 23:00 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAИ которую при желании легко можно декорировать к примеру кэшом . А то ведь не видно особого толка от интерфейсов и инъекций. декорировать кэшом репозиторий? или что Вы имеете в виду? разве, при необходимости в кэшэ, не правильнее будет инъектировать кэш в нуждающийся в нём сервис? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 23:01 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskне правильнее будет инъектировать кэш в нуждающийся в нём сервис? И как ты это сделаешь, если сервис дёргает репозиторий? Про это и речь. Тогда нет смысла в интерфейсах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 23:05 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_taskне правильнее будет инъектировать кэш в нуждающийся в нём сервис? И как ты это сделаешь, если сервис дёргает репозиторий? Про это и речь. Тогда нет смысла в интерфейсах. я правильно понял, что тут намекается на решение типа: 1. отнаследоваться от репозитория, который нуждается в кэшировании 2. инъектировать кэш в наследника (который уже не совсем "репозиторий") 3. при настройке IoC привязать к нужному интерфейсу реализацию нового "кэширующего репозитория" ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 23:19 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, Вот здесь ещё почитай: http://andrey.moveax.ru/post/patterns-oop-structural-decorator там интересней. Ещё можешь книженцию Сергея Теплякова почитать, там тоже доходчиво и актуально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 23:25 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_taskимеется в виду что-то такое? Код: c# 1. Не. Что-то такое: Код: c# 1. а почему не Get(userId), а new AccountByUserSpecification не спрятать в Get? AccountByUserSpecification вообще какой-то мутный класс, чье название больше подходит для функции. нафига под каждый способ выборки (ByUserName, ByUserPenisSize) класс городить? GetBy1способ, GetBy2способ по-моему логичнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 00:44 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Antonariyа почему не Get(userId), а new AccountByUserSpecification не спрятать в Get? Чтобы выполнялся принцип открыт-закрыт. Спецификаций может быть сколько угодно, и для этого не требуется трогать интерфейс репозитория. AntonariyAccountByUserSpecification вообще какой-то мутный класс, чье название больше подходит для функции. нафига под каждый способ выборки (ByUserName, ByUserPenisSize) класс городить? GetBy1способ, GetBy2способ по-моему логичнее. Логичней это выглядит только на школьном обучающем примере. В реальной жизни условий может быть множество, они могут быть сложные, комбинироваться друг с другом, подмешивать условия для безопасности и многое другое. Таким образом, твой репозиторий остаётся открытым для расширения и закрытым для модификаций, что весьма благоприятным образом сказывается на устойчивости архитектуры. GetBy1, GetBy2 — особенность разработки новичков и нубов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 10:44 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Внес некоторые правки, добавил кэширование настроек https://github.com/fiqwenbv/ParrotWings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 16:44 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostt Чтобы выполнялся принцип открыт-закрыт. Спецификаций может быть сколько угодно, и для этого не требуется трогать интерфейс репозитория.Соответственно AccountByUserSpecification тоже должен реализовывать какой-нибудь IAccount? hVostt Таким образом, твой репозиторий остаётся открытым для расширения и закрытым для модификаций, что весьма благоприятным образом сказывается на устойчивости архитектуры.Не понял. "Мой репозиторий" это то, каким его представил я или каким он должен быть по твоим выкладкам, чтобы "благоприятным образом сказывался"? hVostt GetBy1, GetBy2 — особенность разработки новичков и нубовНовичок и нуб это одно и то же :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 18:32 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyСоответственно AccountByUserSpecification тоже должен реализовывать какой-нибудь IAccount? Не, он должен реализовывать что-то типа ISpecification<TEntity>. Где под TEntity подставляется Account, например. AntonariyНе понял. "Мой репозиторий" это то, каким его представил я или каким он должен быть по твоим выкладкам, чтобы "благоприятным образом сказывался"? Ну да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? AntonariyНовичок и нуб это одно и то же :) Неа. Новичёк это чувак с полным отсутствием опыта. Нуб это чувак, которого опыт ничему не учит и он продолжает оставаться на уровне новичка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 18:53 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttAntonariyСоответственно AccountByUserSpecification тоже должен реализовывать какой-нибудь IAccount? Не, он должен реализовывать что-то типа ISpecification<TEntity>. Где под TEntity подставляется Account, например. AntonariyНе понял. "Мой репозиторий" это то, каким его представил я или каким он должен быть по твоим выкладкам, чтобы "благоприятным образом сказывался"? Ну да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? AntonariyНовичок и нуб это одно и то же :) Неа. Новичёк это чувак с полным отсутствием опыта. Нуб это чувак, которого опыт ничему не учит и он продолжает оставаться на уровне новичка :) to hVostt Код: c# 1. а чем это не спецификация? тоже можно обернуть чем-то, и цепочки AND/OR строить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 19:41 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskhVosttпропущено... Не, он должен реализовывать что-то типа ISpecification<TEntity>. Где под TEntity подставляется Account, например. пропущено... Ну да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? пропущено... Неа. Новичёк это чувак с полным отсутствием опыта. Нуб это чувак, которого опыт ничему не учит и он продолжает оставаться на уровне новичка :) to hVostt Код: c# 1. а чем это не спецификация? тоже можно обернуть чем-то, и цепочки AND/OR строить так сказать "из каробки" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 19:45 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskа чем это не спецификация? тоже можно обернуть чем-то, и цепочки AND/OR строить Спецификация может получить нужные ей зависимости, а твой Expression не может. Так что не сравнивай одно место с пальцем. Как простейший учебный вариант покатит, но не в бою. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:46 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
to hVostt в дополнение к этому вопрос, с построением predicate для entity/list<entity> все понятно (на самом деле, мне не все понятно, там может подзапрос в "where" идти, типа "Id in ()"): так что этот шаблон применим штучно, там, где он действительно нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:48 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_taskа чем это не спецификация? тоже можно обернуть чем-то, и цепочки AND/OR строить Спецификация может получить нужные ей зависимости , а твой Expression не может. Так что не сравнивай одно место с пальцем. Как простейший учебный вариант покатит, но не в бою. можно пояснить на примере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:50 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, Ещё лучше это абстракция запрос-обработчик, куда укладываются спецификации (объект-запрос), и прямой путь к разделению на читателя/писателя :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:51 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_task, Ещё лучше это абстракция запрос-обработчик, куда укладываются спецификации (объект-запрос), и прямой путь к разделению на читателя/писателя :) не спорю, что есть случаи и их применения. тут это. пока, не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:56 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_task, Ещё лучше это абстракция запрос-обработчик, куда укладываются спецификации (объект-запрос), и прямой путь к разделению на читателя/писателя :) а почему Вас так читатели/писатели интересуют? CQRS? читал об этом, но, не работал с этой архитектурой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 21:08 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttНу да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен?Я просто не понял, к какой из реализаций относится фраза "благоприятным образом". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 21:33 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttс агрегатами доменной модели можете тут прояснить? у меня с этим опыт только как настроить маппинг NH (там так можно), чтобы "документ и его табличные части все разом сохранились (у них есть тоже зависимые объекты)". про это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 21:39 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskа почему Вас так читатели/писатели интересуют? CQRS? читал об этом, но, не работал с этой архитектурой. В данный момент мы активно используем DDD/CQRS/ES. Поэтому и интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 22:16 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyЯ просто не понял, к какой из реализаций относится фраза "благоприятным образом". Разумное следование принципам SOLID, мы говорили об одном из принципов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 22:18 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskможете тут прояснить? у меня с этим опыт только как настроить маппинг NH (там так можно), чтобы "документ и его табличные части все разом сохранились (у них есть тоже зависимые объекты)". про это? С натягом да, про это. В EF/NH корни агрегации можно выделить лишь условно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 22:19 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttAntonariyСоответственно AccountByUserSpecification тоже должен реализовывать какой-нибудь IAccount? Не, он должен реализовывать что-то типа ISpecification<TEntity>. Где под TEntity подставляется Account, например. А можешь дать сылку или набросать кратенький пример, раскрывающий смысл этого ISpecification<TEntity>. Хочу переделать под этот паттерн такой код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. И еще вопрос, связанный с этим кодом. IPQList<T> зависит не от интерфейсов, а от классов AjaxJsonGetResult и Paging, а это, насколько я понимаю, моветон. Или нет? Если да, то проблема в Paging (на AjaxJsonGetResult можно забить, это временная затычка пока студию не починят ): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Как быть в такой ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 18:13 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyА можешь дать сылку или набросать кратенький пример, раскрывающий смысл этого ISpecification<TEntity>. https://en.wikipedia.org/wiki/Specification_pattern ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 18:18 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyА можешь дать сылку или набросать кратенький пример, раскрывающий смысл этого ISpecification<TEntity>. Хочу переделать под этот паттерн такой код: Конкретно особенностей реализации, их довольно много. Большинство из них базируются на Expression внутрях, но не все. Вот зачётный примерчик http://enterprisecraftsmanship.com/2016/02/08/specification-pattern-c-implementation/ AntonariyИ еще вопрос, связанный с этим кодом. IPQList<T> зависит не от интерфейсов, а от классов AjaxJsonGetResult и Paging, а это, насколько я понимаю, моветон. Или нет? Если да, то проблема в Paging (на AjaxJsonGetResult можно забить, это временная затычка пока студию не починят ): Ну вот у тебя пример по сути что-то типа Query Object, только неудачный, так как используется сериализация в строку, что выглядит как костыль для возможности работать с веб-приложением. Сериализация/десреиализация это вопрос, решающийся на стыке клиент-сервер, посмотри на ModelBinder к примеру. Не нужно это просовывать внутрь своих сервисов. Ужасно тяжко поддерживать, отлаживать и развивать. Paging может быть либо одним из комбинируемых спецификаций, либо базовой спецификацией. Результат запроса придётся также обобщить, так как тебе надо ещё общее количество элементов. Интерфейс IPaging опять же, у тебя решает несколько задач, и вообще по виду призван обслуживать прикладные запросы клиентского кода. Его в сервисах тоже не должно быть, на мой взгляд. Результат запроса по пейджингу: это срез + общее количество элементов. А IPageabe это больше относится к view model, так информация HasNext/HasPrevious и проч. нужна для презентации, в логике она не нужна. AntonariyОднако сделать зависимость IPQList от IPaging<TEntity> вместо Paging<TEntity> невозможно, поскольку Paging, реализующий IPaging<TEntity> немедленно требует конкретный <Entity>. Paging<TEntity> прекрасно справляется со всеми entity, и городить отдельный Paging для каждого entity совсем не хочется. Не, конечно не надо этого делать. Речь-то шла о спецификациях, а не о результатах запроса. Репозиторий может выглядеть так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. Для пейджинга отдельный метод. По моему же глубокому убеждение, методов, возвращающих коллекции репозиторий иметь не должен. Он должен уметь извлечь сущность из хранилища по ID, добавить и удалить. Всё. Остальное уходит на роль IQuery / IQueryProcessor / IQueryHandler<IQuery> — это намного гибче и не надо ходить по скользкому краю, постоянно матерясь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 18:57 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttPaging может быть либо одним из комбинируемых спецификаций, либо базовой спецификацией. на мой взгляд, Paging, не относится к спецификации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:15 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskhVosttPaging может быть либо одним из комбинируемых спецификаций, либо базовой спецификацией. на мой взгляд, Paging, не относится к спецификации Я предложил ниже вариант, где не относится. Но если обобщить результат запроса, то можно и сделать спецификацией. Не вижу проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:21 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttОстальное уходит на роль IQuery / IQueryProcessor / IQueryHandler<IQuery> — это намного гибче и не надо ходить по скользкому краю, постоянно матерясь. тут кроме гибкости добавляется еще б о льшая уверенность в том, что ОРМ сгенерит "нужный SQL" (спецификация тут может подводить). но этот шаблон фактически означает написание готовых параметризированных запросов под разные, возможно, схожие цели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:22 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskhVosttОстальное уходит на роль IQuery / IQueryProcessor / IQueryHandler<IQuery> — это намного гибче и не надо ходить по скользкому краю, постоянно матерясь. тут кроме гибкости добавляется еще б о льшая уверенность в том, что ОРМ сгенерит "нужный SQL" (спецификация тут может подводить). но этот шаблон фактически означает написание готовых параметризированных запросов под разные, возможно, схожие цели в смысле, это его "минус" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:24 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskтут кроме гибкости добавляется еще б о льшая уверенность в том, что ОРМ сгенерит "нужный SQL" (спецификация тут может подводить). но этот шаблон фактически означает написание готовых параметризированных запросов под разные, возможно, схожие цели Спецификация не отвечает за генерацию нужного SQL, за это отвечает провайдер. В случае EF, это LINQ провайдер. Поэтому подводить она не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:26 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_taskтут кроме гибкости добавляется еще б о льшая уверенность в том, что ОРМ сгенерит "нужный SQL" (спецификация тут может подводить). но этот шаблон фактически означает написание готовых параметризированных запросов под разные, возможно, схожие цели Спецификация не отвечает за генерацию нужного SQL, за это отвечает провайдер. В случае EF, это LINQ провайдер. Поэтому подводить она не может. может даже не работать в зависимости от EF/NH ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:39 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskможет даже не работать в зависимости от EF/NH Конкретные реализации могут работать и с EF и с LINQ, и даже с LINQ со своим провайдером. Но в целом, лучше абстрагироваться, чтобы иметь возможность подключать другие источники данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:43 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_taskможет даже не работать в зависимости от EF/NH Конкретные реализации могут работать и с EF и с LINQ, и даже с LINQ со своим провайдером. Но в целом, лучше абстрагироваться, чтобы иметь возможность подключать другие источники данных. я про то, что не все так идеально, как хотелось бы. вот тут https://github.com/fiqwenbv/ParrotWings/blob/master/ParrotWings.DataService/AmountTransactionService.cs (46) можно было бы перенести условие выборки до проекции в DТО. и там использовать спецификацию AccountByUserSpecification. и это работает в EF, проверял (какой там SQL я не смотрел), а в NH падает с "не поддерживается". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:52 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Вы, hVostt , писали еще про фильтрацию. там еще больше будет различий реализаций EF/NH, особенно в части подзапросов. как вы с этим боретесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:59 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskможно было бы перенести условие выборки до проекции в DТО. и там использовать спецификацию AccountByUserSpecification. и это работает в EF, проверял (какой там SQL я не смотрел), а в NH падает с "не поддерживается". Всё верно, NH много чего не поддерживается, асинхронный доступ, нормальные проекции с группировкой тоже не работают. Вообще NH шлак по моему скромному мнению. test_taskВы, hVostt , писали еще про фильтрацию. там еще больше будет различий реализаций EF/NH, особенно в части подзапросов. как вы с этим боретесь? Мы решили вопрос по-другому, мы обходимся вообще без подзапросов. Вместо этого у нас плоские проекции данных в SQL и ElasticSearch, благодаря архитектуре CQRS / ES. А репозиторий у нас возвращает объекты только по ID, никаких списков, фильтров и прочего. Это не нужно совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 20:57 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttСериализация/десреиализация это вопрос, решающийся на стыке клиент-серверТак она и решается на стыке. public AjaxJsonGetResult<Paging<UwsRoles>> GetPQList это метод контроллера. hVosttРепозиторий может выглядеть так: А он так и выглядит, для Paging отдельный метод: repo.GetList hVosttИнтерфейс IPaging опять же, у тебя решает несколько задач, и вообще по виду призван обслуживать прикладные запросы клиентского кода. Его в сервисах тоже не должно быть, на мой взгляд. Результат запроса по пейджингу: это срез + общее количество элементов. А IPageabe это больше относится к view model, так информация HasNext/HasPrevious и проч. нужна для презентации, в логике она не нужна.Да, это как-то выпало из внимания. hVosttПо моему же глубокому убеждение, методов, возвращающих коллекции репозиторий иметь не должен. Он должен уметь извлечь сущность из хранилища по ID, добавить и удалить. Всё.Тогда какой в нем смысл? Все это контекст умеет делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 11:21 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyТогда какой в нем смысл? Прозрачность хранения данных. Пишешь: дай мне объект по идентификатору, - и тебе возвращается объект. А откуда: из кэша, памяти, сетевой шары, SQL базы, NoSQL базы, стороннего сервиса, - тебе по фигу. А контекст он прибит к конкретному типу хранилища. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 12:08 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
А репозитарий разве не прибит к конкретному типу хранилища? Или его можно прибивать сразу к нескольким типам хранилищ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 13:06 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyА репозитарий разве не прибит к конкретному типу хранилища? Или его можно прибивать сразу к нескольким типам хранилищ? Конкретная реализация прибита. Но обычно же используют DI. Также можно декорирование считать за "прибивать сразу к нескольким типам хранилищ". В комбинации получаем, что не трогая код изменили конфигурацию, и данные начали выбираться согласно последней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 13:41 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyТак она и решается на стыке. public AjaxJsonGetResult<Paging<UwsRoles>> GetPQList это метод контроллера. Точно, не сразу понял, что это у тебя контроллер. AntonariyhVosttПо моему же глубокому убеждение, методов, возвращающих коллекции репозиторий иметь не должен. Он должен уметь извлечь сущность из хранилища по ID, добавить и удалить. Всё.Тогда какой в нем смысл? Все это контекст умеет делать. Сущность тебе нужна, чтобы произвести изменения. А приложению обычно нужны всякие разные срезы данных, с группировкой, подсчётами, фильтрацией + безопасность. Я считаю, это выходит за рамки ответственности репозитория. С DbCobtext-ом это решается через LINQ-проекции. Это довольно неплохой и эффективный способ получать данные быстро без накладных расходов. Автоматическая генерация SQL с подзапросами опять же. Но здесь есть предел гибкости. Кеширование приделать довольно трудоёмко и сложно (инвалидация), разнести данные по разным хранилищам практически никак. Масштабируется такое решение совсем плохо. С микросервисной архитектурой такой подход не дружит совсем, в общем информационном пространстве, но с разными ограниченными контекстами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 02:38 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttНу да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? A уровнем выше тоже нет обертки в GetBy1() ? Типа в контроллере будет repo.Find(someSpecification) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 13:21 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонhVosttНу да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? A уровнем выше тоже нет обертки в GetBy1() ? Типа в контроллере будет repo.Find(someSpecification) ? Хм, к примеру на контроллер прилетает следующее: "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне". И в GetByЧто вы это превратите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 14:45 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонA уровнем выше тоже нет обертки в GetBy1() ? Типа в контроллере будет repo.Find(someSpecification) ? Это может быть сервис, работающий с конкретными спецификациями. В контроллере дёргаем этот сервис. Часто, когда программистами создаётся кучу всяких слоёв: репозитории, дата-сервисы, uow, менеджеры, провайдеры и ещё +100500 интерфейсов... Это вообще никак не приводит к тому, чтобы в контроллерах не писалась бизнес-логика. Она всё равно там пишется, а ещё размазывается по классам. Только используя интерфейсы, чтобы.. ну типа связать всё в одно. Подобное легко обнаружить, глядя на конструктор контроллера: видишь там 5-10 зависимостей, сразу понимаешь ниже будет треш ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 15:29 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAХм, к примеру на контроллер прилетает следующее: "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне". И в GetByЧто вы это превратите? А у спецификации не будет названия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 15:37 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонskyANAХм, к примеру на контроллер прилетает следующее: "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне". И в GetByЧто вы это превратите? А у спецификации не будет названия? В какой именно момент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 15:42 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAПарамонпропущено... А у спецификации не будет названия? В какой именно момент? У вас строго типизированая спецификация или Generic? Класс, который реализует конкретную спецификацию как назовете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 16:00 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонskyANAпропущено... В какой именно момент? У вас строго типизированая спецификация или Generic? Класс, который реализует конкретную спецификацию как назовете? Класс назову к примеру AccomodationSpecification, а интерфейс, что он реализует ISpecification :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 16:36 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAПарамонпропущено... У вас строго типизированая спецификация или Generic? Класс, который реализует конкретную спецификацию как назовете? Класс назову к примеру AccomodationSpecification, а интерфейс, что он реализует ISpecification :) И как такое название намекает на ваши условия? Или передаём Expression прямо из контроллера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 16:52 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонskyANAпропущено... Класс назову к примеру AccomodationSpecification, а интерфейс, что он реализует ISpecification :) И как такое название намекает на ваши условия? Или передаём Expression прямо из контроллера? Разверните первый вопрос, не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 17:09 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAПарамонпропущено... И как такое название намекает на ваши условия? Или передаём Expression прямо из контроллера? Разверните первый вопрос, не понимаю. Если второй понятен, то первый отпадает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 17:37 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Нет, Expression прямо из контроллера не передаём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 17:46 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANA, Он просит показать спецификацию для условия "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне". Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Можно разбить на несколько спецификаций и смешивать их. Или сделать Строителя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 18:07 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAНет, Expression прямо из контроллера не передаём. AccomodationSpecification конкретно реализует только те условия, которые были в вашем примере? Это сложно понять из названия, оно слишком общее. skyANAИ в GetByЧто вы это превратите? GetAccomodationHotels() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 18:09 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонЭто сложно понять из названия, оно слишком общее. В контексте букинга, сложно придумать другой смысл :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 18:16 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонAccomodationSpecification конкретно реализует только те условия, которые были в вашем примере? AccomodationSpecification внутри себя содержит выражение, которому должны удовлетворять искомые услуги проживания. Выражение это может состоять из тех условий, что я озвучил, а может и из меньшего количества, а может и из большего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 18:17 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttПарамонЭто сложно понять из названия, оно слишком общее. В контексте букинга, сложно придумать другой смысл :) Ну да. Accomodation - это размещение, или проживание. Хотя можно и уточнить: HotelAccomodation (размещение в гостинице). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 18:18 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttПарамонЭто сложно понять из названия, оно слишком общее. В контексте букинга, сложно придумать другой смысл :) Пытался понять зачем мне искать название методу, который по сути просто поиск по параметрам. :) bookingService.FindHotels(searchModel) как вариант. Но, как понял передают спецификацию на прямую из контроллера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 20:50 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Парамон, Твой вариант потребует изменять интерфейс и реализацию сервиса, когда понадобится добавить новое условие. Если условие надо будет изменить или расширить, ты рискуешь сломать вызовы. Спецификации могут находиться в разных сборках и использоваться без изменения или перекомпиляции репозитория. Букинг сервис действительно может выглядеть как ты описал, а он может использовать спецификацию для репозитория. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 21:09 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Вопросы по спецификации. Такой интерфейс Код: c# 1. 2. 3. 4. предполагает, что эта спецификация будет воткнута до Код: c# 1. а если надо после в виде Код: c# 1. как быть ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 23:22 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskкак быть ??? Например, так: Код: c# 1. 2. 3. 4. test_taskа если надо после в виде Код: c# 1. Получится так: Код: c# 1. Такая спецификация может не только отфильтровать, но и отсортировать, или сделать подвыбоку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 09:23 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_taskкак быть ??? Например, так: Код: c# 1. 2. 3. 4. test_taskа если надо после в виде Код: c# 1. Получится так: Код: c# 1. Такая спецификация может не только отфильтровать, но и отсортировать, или сделать подвыбоку. тут Код: c# 1. 2. 3. 4. имеем ограничение Код: c# 1. а фильтровать надо "по анонимному типу" Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 09:40 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, Спецификации изначально не расположены для работы с анонимными типами, по тому факту, что анонимные типы закрыты в том участке кода, где они используются, а дальше только рефлексией, что уже хуже, чем ADO-шные DataTable/DataSet. Убирай анонимные типы и заменяй на DTO-классы. С ними хотя бы протестировать можно твой код и писать обвязку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 15:28 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
повносил некоторые изменения https://github.com/fiqwenbv/ParrotWings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 18:35 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, Код: c# 1. У тебя не поймёшь, сделай нормально SaveChanges() это задача UnitOfWork, а не IRepository, сам посмотри какой бардак: ISettingsRepository settingsRepository, IBaseRepository<Account> accountRepository... и IRepository. Если бы сервисы не занимались построением запросов, ты бы убрал их, инкапсулировал в IQuery<TResult> (например Query<AccountDTO>), чтобы в сервисах только была логика, стало бы чище и лучше. А сейчас грязно, понамешано всего в кучу, сам попробуй свой код прочитать отстранённо, очень тяжело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 19:05 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Не особо это улучшает ситуацию, ты возвращаешь живой и ленивый IQueryable от провайдера, потом начинаешь на нём достраивать запрос. Это даже хуже, чем если бы ты сразу всё в сервисе сделал. Попробуй так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 19:22 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_task, Код: c# 1. У тебя не поймёшь, сделай нормально SaveChanges() это задача UnitOfWork, а не IRepository, сам посмотри какой бардак: 1. ISettingsRepository settingsRepository, IBaseRepository<Account> accountRepository... и 2. IRepository . Если бы сервисы не занимались построением запросов, 3. ты бы убрал их, инкапсулировал в IQuery<TResult> (например Query<AccountDTO>), чтобы в сервисах только была логика, стало бы чище и лучше. А сейчас грязно, понамешано всего в кучу, сам попробуй свой код прочитать отстранённо, очень тяжело. 1. Это да, согласен, тут по предложению твоему и skyANA добавил декоратор. сделал так, чтобы проще было с неимплементированными методами 2. Так заканчивается работа UoW - repository.SaveChanges() - дергается из сервисов. 3. А в чем профит? на мой взгляд: не единообразно, IQuery<TResult> уже сервиса, сервис может что-то там добавить, например, какую-то пост обработку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 20:03 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_task, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Не особо это улучшает ситуацию, ты возвращаешь живой и ленивый IQueryable от провайдера, потом начинаешь на нём достраивать запрос. Это даже хуже, чем если бы ты сразу всё в сервисе сделал. Попробуй так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. спасибо. подумаю над этим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 20:20 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task2. Так заканчивается работа UoW - repository.SaveChanges() - дергается из сервисов. У репозитория нет задачи завершать работу, отслеживать и коммитить изменения. Просто так ты путаешь людей, которые будут работать с твоим кодом, в примере ты должен показать, что заботишься на этот счёт. test_task3. А в чем профит? на мой взгляд: не единообразно, IQuery<TResult> уже сервиса, сервис может что-то там добавить, например, какую-то пост обработку Пост-обработку делай. Но там и запросы колбасишь. У тебя всё в куче. Сервис не должен знать о подробностях того, как ты запросы делаешь. LINQ, или SQL собираешь из кусочков, или вообще через веб-сервис данные запрашиваешь. Смешиваешь одно с другим, из-за этого тебе будет крайне тяжело тестировать свой код и сопровождать проблематично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 20:22 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttСервис не должен знать о подробностях того, как ты запросы делаешь. LINQ, или SQL собираешь из кусочков, или вообще через веб-сервис данные запрашиваешь. разве это выполнимо? при использовании поддерживающих LINQ ОРМ - еще куда не шло (тот же NH при ICriteria - уже выбывает из фэншуя, вернее там свой фэншуй). но если RAW SQL - там "своя атмосфэра", про внешние веб-сервисы тоже самое. я про то, что абстракции дырявые. для меня пока интересно чтобы работало для EF и NH ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 21:19 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskразве это выполнимо? Что выполнимо? У тебя некий чёрный ящик, ты отдаёшь в него параметры запроса, получаешь результат. Как это произошло не важно. Может там использовались ICriteria для NH, или LINQ для EF, или SQL, или ещё что-то. Своя атмосфера, ок. Нам знать этого не надо. Нам нужны данные. test_taskя про то, что абстракции дырявые. для меня пока интересно чтобы работало для EF и NH ИМХО не вижу смысла тратить время на NH, хотя на удивление там 4-ую версию пилят. Нафига, непонятно :) Что до абстракций, ну надо знать меру. Надо понимать, зачем ты абстрагируешься. Что тебе это даёт. Когда ты в сервис запихал и логику и выполнение запросов, через LINQ-абстракцию, вот у тебя и она и потекла. А что, если нужно сделать запрос, не реализуемый на LINQ? Например, CTE? На самом деле CTE можно сделать через вью, но это костыль. Напрямую нельзя. Придётся втыкать какие-то распорки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 21:27 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttУ тебя некий чёрный ящик, ты отдаёшь в него параметры запроса, получаешь результат. Как это произошло не важно. Может там использовались ICriteria для NH, или LINQ для EF, или SQL, или ещё что-то. Своя атмосфера, ок. Нам знать этого не надо. Нам нужны данные. для меня это проблема, может, и надуманная (я же не могу в сервисах использовать ICriteria, это прибиваться к реализации ОРМ). корень - фильтрация, проекции..., это же обязанность бизнес уровня, вроде. если не так, не получится никаких спецификаций, проекций, агрегаций. да и репозиторий теряет свою значимость. или я чего-то не знаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 21:54 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, Фильтры реализуются спецификациями. По сути те же яйца как ICriteria, только чуть более высокоуровневые, они для NH могут конвертится в ICriteria, а для EF в LINQ и т.д. Но это если ты хочешь получить объекты ORM (сущности). Запрос с параметрами и динамические фильтры -- это не одно и то же. Одним из параметров запроса может быть фильтр. У тебя из-за этого и протекает в сервисы какой-нибудь LINQ, а если бы не LINQ, то ошмётки ICriteria. В общем, ORM тебе только мешает в данном случае :) Если не сможешь просто разделить понятия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 22:46 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_task, Спецификации изначально не расположены для работы с анонимными типами, по тому факту, что анонимные типы закрыты в том участке кода, где они используются, а дальше только рефлексией, что уже хуже, чем ADO-шные DataTable/DataSet. Убирай анонимные типы и заменяй на DTO-классы. С ними хотя бы протестировать можно твой код и писать обвязку. с чего эт гости понаехали? Какая такая рефлексия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 08:27 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВс чего эт гости понаехали? Какая такая рефлексия? А что ты будешь делать с объектом, не зная его типа? return IEnumerable<anonymous type> дальше что по твоему? без рефлексии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 08:55 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Кому вернуть и как использовать? hVostt return IEnumerable<anonymous type> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 10:41 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВКому вернуть и как использовать? hVosttreturn IEnumerable<anonymous type> Я хз, с чем ты не согласен, и что ты хочешь узнать. Вернуть тому, кому нужно, использовать так, как хочется использовать. В чём проблема? По существу будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 11:17 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
реализовал, согласно рекомендациям hVostt, Query object https://github.com/fiqwenbv/ParrotWings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 21:38 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, Стало намного лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 21:56 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostt, Если есть Код: c# 1. , то это так же хорошо, как например что Код: c# 1. может принимать в качестве аргумента Код: c# 1. Написанный фик знает кем. На крайняк есть картежи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2017, 10:56 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВ, С анонимным типом ты за рамки метода не выйдешь, значит тебе придётся сосредоточить всю логику и запрос внутри. И получится каша. Чем тут помогут кортежи? Кортежи придётся строго типизировать в контрактах, это не лучше, чем отдельный класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2017, 10:59 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttЕвгенийВ, С анонимным типом ты за рамки метода не выйдешь, значит тебе придётся сосредоточить всю логику и запрос внутри. Смотря чего хочешь. Если нужно просто получить данные и прибиндить их к UI, то почему бы и нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2017, 14:55 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
я про анонимный тип в проекции, если честно, задал риторический вопрос - типа "дальше еще хуже". IQuery - это мощь. как я раньше не обращал на него внимание. и отношение к репозиторию сильно поменял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2017, 18:05 |
|
||
|
|

start [/forum/topic.php?all=1&fid=18&tid=1355492]: |
0ms |
get settings: |
4ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
23ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
167ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 456ms |

| 0 / 0 |
