|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANASeVaВряд ли у вас получиться что-либо доказать силой мысли. Нужны конкретные примеры. Упражнения в красноречии и разговоры о сферических конях не интересны.Примеры чего Вам нужны? Что Ваше решение менее гибкое, чем с пресловутым репозиторием? Дак Вы сами признали, что проект жёстко увязан c EF. Тесты без БД не запустишь, с Memcached не поиграешься. А доказывать я ничего и не собирался. Но если хотите, то можем доказать, что SRP Вы не соблюдаете. Кака единственная ответственность лежит на классе SvcPersonal? Только не говорите: содержать логику. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2013, 23:59 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVaАлексей, я в эти игры играю давно , уже сделан не один проект и знаю о чем говорю.Игроман? :-) Некогда мне тут в диконтейнеры играть. Мне важен результат а не процесс. Как только от диконтейнера в моих проектах будет польза, он обязательно будет использован. А пока в нём смысла нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2013, 13:12 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... пропущено... Вряд ли у вас получиться что-либо доказать силой мысли. Нужны конкретные примеры. Упражнения в красноречии и разговоры о сферических конях не интересны.Примеры чего Вам нужны? Что Ваше решение менее гибкое, чем с пресловутым репозиторием?Аналогичный код, написанный "правильно". Ваша инкапсуляция откровенно говоря не впечатлила. skyANAДак Вы сами признали, что проект жёстко увязан c EF.Да. skyANAТесты без БД не запустишь, с Memcached не поиграешься. И не надо. Мне проще подготовить БД с тестовыми данными. skyANAА доказывать я ничего и не собирался. Но если хотите, то можем доказать, что SRP Вы не соблюдаете. Кака единственная ответственность лежит на классе SvcPersonal? Только не говорите: содержать логику. skyANAНу и если говорить о SOLID, то явное нарушение принципа Single responsibility: класс и репозиторий, и маппер, и сервис.Ну давайте попробуем: Репозитарий - Да. Маппер - Нет, маппинг DbDataReader -> Object производит EF. Сервис - этим занимается WCF, на прикладном коде это практически никак не отражается. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2013, 13:20 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КSeVaАлексей, я в эти игры играю давно , уже сделан не один проект и знаю о чем говорю.Игроман? :-) Некогда мне тут в диконтейнеры играть. Мне важен результат а не процесс. Как только от диконтейнера в моих проектах будет польза, он обязательно будет использован. А пока в нём смысла нет. Ну, в игрушки собственного производства это ты до сих пор играешь. Чужие осилить еще не можешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2013, 14:56 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVaЧужие осилить еще не можешь.Почему ты так решил? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2013, 15:22 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Примеры чего Вам нужны? Что Ваше решение менее гибкое, чем с пресловутым репозиторием?Аналогичный код, написанный "правильно". Ваша инкапсуляция откровенно говоря не впечатлила. skyANAДак Вы сами признали, что проект жёстко увязан c EF.Да. skyANAТесты без БД не запустишь, с Memcached не поиграешься. И не надо. Мне проще подготовить БД с тестовыми данными. skyANAА доказывать я ничего и не собирался. Но если хотите, то можем доказать, что SRP Вы не соблюдаете. Кака единственная ответственность лежит на классе SvcPersonal? Только не говорите: содержать логику. skyANAНу и если говорить о SOLID, то явное нарушение принципа Single responsibility: класс и репозиторий, и маппер, и сервис.Ну давайте попробуем: Репозитарий - Да. Маппер - Нет, маппинг DbDataReader -> Object производит EF. Сервис - этим занимается WCF, на прикладном коде это практически никак не отражается. На базе объектов EF легко сделать репозиторий этот пресловутый. Почему вы не сделали?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2013, 15:33 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanНа базе объектов EF легко сделать репозиторий этот пресловутый. Почему вы не сделали?))Говорят, не умею. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2013, 15:36 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Примеры чего Вам нужны? Что Ваше решение менее гибкое, чем с пресловутым репозиторием?Аналогичный код, написанный "правильно". Ваша инкапсуляция откровенно говоря не впечатлила.А я и не преследовал цели впечатлить Вас. То был банальный пример, как ограничить доступ к состоянию объекта. То есть банальный пример инкапсуляции. Просто запомните, вдруг понадобится. Алексей КskyANAДак Вы сами признали, что проект жёстко увязан c EF.Да. skyANAТесты без БД не запустишь, с Memcached не поиграешься. И не надо. Мне проще подготовить БД с тестовыми данными.А готовите? Пишите тесты? Что-то я их рядом с проектом не заметил. Алексей КskyANAА доказывать я ничего и не собирался. Но если хотите, то можем доказать, что SRP Вы не соблюдаете. Кака единственная ответственность лежит на классе SvcPersonal? Только не говорите: содержать логику. skyANAНу и если говорить о SOLID, то явное нарушение принципа Single responsibility: класс и репозиторий, и маппер, и сервис.Ну давайте попробуем: Репозитарий - Да.Помимо основной функции репозитория я вижу ещё и некоторую логику, типа "упс, такому входному параметру соответствует более одного элемента, ловите исключение". Плюс валидация данных. Что также нарушает принцип того, что повод для изменения должен быть только один. Валидацию я бы выделил в отдельный компонент - PersonalValidator. Алексей КМаппер - Нет, маппинг DbDataReader -> Object производит EF.А я не про data mapping, а про personal -> PersonalView. Алексей КСервис - этим занимается WCF, на прикладном коде это практически никак не отражается.Предложат Вам с новом году: Алексей, а давай заменим WCF сервис на RESTful на базе WebAPI, - и придётся Вам код копипастить в ApiController. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2013, 18:51 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КnetivanНа базе объектов EF легко сделать репозиторий этот пресловутый. Почему вы не сделали?))Говорят, не умею. :-)Пока у Вас нет полноценного репозитория, что отдаёт чистые доменные объекты, не завязанные на EF и System.Runtime.Serialization. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2013, 18:53 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей КИ не надо. Мне проще подготовить БД с тестовыми данными.А готовите? Пишите тесты? Что-то я их рядом с проектом не заметил.Потому что этот проект не содержит логики, достойной организации для неё полноценного тестирования. Для системных библиотек у меня есть тесты, но я их не стал выкладывать. Не думаю, что они будут кому-то интересны. skyANAПомимо основной функции репозитория я вижу ещё и некоторую логику, типа "упс, такому входному параметру соответствует более одного элемента, ловите исключение". Плюс валидация данных. Что также нарушает принцип того, что повод для изменения должен быть только один. Валидацию я бы выделил в отдельный компонент - PersonalValidator.Получится класс с одним маленьким методом. Недостаточная ответственность класса Вас не пугает? skyANAАлексей КМаппер - Нет, маппинг DbDataReader -> Object производит EF.А я не про data mapping, а про personal -> PersonalView. Алексей КСервис - этим занимается WCF, на прикладном коде это практически никак не отражается.Предложат Вам с новом году: Алексей, а давай заменим WCF сервис на RESTful на базе WebAPI, - и придётся Вам код копипастить в ApiController.Копипастить не придётся. По факту будет произведено выделение класса. Дадим ему тогда гордое имя PersonalRepository. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2013, 19:22 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей КСервис - этим занимается WCF, на прикладном коде это практически никак не отражается.Предложат Вам с новом году: Алексей, а давай заменим WCF сервис на RESTful на базе WebAPI, - и придётся Вам код копипастить в ApiController.Но это фантастика. Вероятнее будет предложено добавить доступ через HTTP, как это нынче принято в интеграциях. На что будет добавлен ещё один WCF ServiceHost, как я уже писал ранее. Прикладной код это вообще никак не коснётся. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2013, 09:09 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей КМаппер - Нет, маппинг DbDataReader -> Object производит EF.А я не про data mapping, а про personal -> PersonalView.Это не мапинг, это прикладная логика. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2013, 10:36 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей, забудь про солид в своих гавноклассах, кури вот это :) http://codearticles.ru/articles/2407 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2013, 12:46 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
МСУАлексей, забудь про солид в своих гавноклассах, кури вот это :) http://codearticles.ru/articles/2407 В кодогенераторе EF-контекста есть репозитарий . Так что можно расслабиться и успокоиться. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 08:41 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КМСУАлексей, забудь про солид в своих гавноклассах, кури вот это :) http://codearticles.ru/articles/2407 В кодогенераторе EF-контекста есть репозитарий . Так что можно расслабиться и успокоиться. :-) Красота :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
http://msdn.microsoft.com/ru-ru/library/ms188336.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 09:05 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... В кодогенераторе EF-контекста есть репозитарий . Так что можно расслабиться и успокоиться. :-) Красота :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
http://msdn.microsoft.com/ru-ru/library/ms188336.aspx Там exists не катит. Там надо учитывать в том числе значение поля major_id существующей записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 09:15 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КТам exists не катит. Там надо учитывать в том числе значение поля major_id существующей записи. Ну так добавить в where условие major_id is null и обернуть это дело в exists )) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 09:20 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
МСУАлексей КТам exists не катит. Там надо учитывать в том числе значение поля major_id существующей записи. Ну так добавить в where условие major_id is null и обернуть это дело в exists ))Зачем? И так всё прекрасно работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 09:29 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Говорят, не умею. :-)Пока у Вас нет полноценного репозитория, что отдаёт чистые доменные объекты, не завязанные на EF и System.Runtime.Serialization. да спорный это момент конечно. Ну реально репозиторий на объектах EF будет хватать в большинстве случаев. Чтобы не делать потом сто раз маппинги. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 10:41 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAпропущено... Пока у Вас нет полноценного репозитория, что отдаёт чистые доменные объекты, не завязанные на EF и System.Runtime.Serialization. да спорный это момент конечно. Ну реально репозиторий на объектах EF будет хватать в большинстве случаев. Чтобы не делать потом сто раз маппинги.Data Mapping - это не ответсвенность репозитория. Подозреваю, что в большинстве Ваших случаев репозиторий вообще не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 10:52 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAData Mapping - это не ответсвенность репозитория.Особенно Mapping DbDataReader => Object. skyANAПодозреваю, что в большинстве Ваших случаев репозиторий вообще не нужен.Звучит осуждающе. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:08 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAПока у Вас нет полноценного репозитория, что отдаёт чистые доменные объекты, не завязанные на EF и System.Runtime.Serialization.EF DbContext API рассчитан на то, чтобы бизнес-объекты ничего не знали про EF. Особенно если использовать Fluent API. WCF требует от классов только атрибуты. Тут зависимости тоже особо никакой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:12 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAData Mapping - это не ответсвенность репозитория.Особенно Mapping DbDataReader => Object. Он про маппинг доменных объектов. Маппингом репозиторий не занимается. Маппить может контроллер или иная промежуточная абстраккция. Например, есть доменный объект и модель представления. Кто должен смапить их как в одну, так и в другую сторону? Правильно, кто угодно, но только не репозиторий. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:17 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
ИМХО пока данные лежат в одном месте и нет необходимости в нескольких вариантах доступа к ним, то сложно понять суть репозитория, в особенности следующей фразы из описания шаблона: "код распределения данных, скрытый в объекте Repository, позаботится о соответсвующих операциях незаметно для разработчика". Например у нас в проекте имеется следующий интерфейс: Код: c# 1.
И несколько вариантов реализации: Код: c# 1.
Код: c# 1.
Код: c# 1.
Код: c# 1.
Почему так? Потому что у нас основное хранилище - это Sql Server. Часть данных/сущностей/Entity хранится в MongoDB. Часть данных/сущностей/Entity необходимо кэшировать. Часть данных/сущностей/Entity, что хранится в MongoDB участвует в транзакциях, а монго их не поддерживает. Необходима своя реализация. Причём кэш и поддержка транзакционности не нужна в ряде случаев: миграция, клонирование, перенос данных между базами и нодами, нагрузочное тестирование,. Попросту говоря тут необходимо включить, тут отключить незаметно для вызывающего кода. Вот такие пироги. Говорите репозитория на объектах EF хватит? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:20 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... Особенно Mapping DbDataReader => Object. Он про маппинг доменных объектов.Сори, у меня телепатор в ремонте. :-) МСУМаппингом репозиторий не занимается. Маппить может контроллер или иная промежуточная абстраккция. Например, есть доменный объект и модель представления. Кто должен смапить их как в одну, так и в другую сторону? Правильно, кто угодно, но только не репозиторий.Маппинг сам по себе - зло. Не надо описывать одинаковые структуры данных в разных классах и никакие маппинги не потребуются. Единственное место где нужен специальный DTO - это при написании вебсервиса для интеграции с внешней системой. Там важно гарантировать постоянный контракт. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:23 |
|
|
start [/forum/topic.php?fid=20&msg=38516398&tid=1403421]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 331ms |
total: | 501ms |
0 / 0 |