|
О применении SOLID
|
|||
---|---|---|---|
#18+
По мотивам закрытого топика. skyANAКак Вы предлагете использовать сборку MessageServer.dll? Тупо референс на неё добавить? И что это даст?Вы правильно заметили, что:skyANAАлексей К Тут выделена часть кода для повторного использования.Посмотрел на класс. Это действительно "часть кода для повторного использования", то есть в нём просто собранны методы, что используются в проекте более одного раза. Этакий глобальный хелпер для проекта.Речь шла о повторном использовании фрагментов логики именно внутри данного проекта (solution в терминологии VS). Повторное использование этой логики вне данного проекта не требуется. А для повторного использования внутри проекта - да, достаточно "тупо референс на неё добавить". Я не планирую использовать прикладной модуль MessageServer.dll где-то ещё кроме этого проекта. Проект разделён на прикладные модули для удобства его сопровождения. Для повторного использования в нескольких проектах (их у меня сейчас 6) предназначены 3 системных модуля SspMainXXX.dll. Здесь нет необходимости выделения прикладной логики в отдельный слой репозитариев для её отделения от слоя WCF-ных сервисов. Здесь нет необходимости в описании всего и вся интерфейсами с последующей интеграцией этого безобразия DI-контейнером. Пусть классы зависят от классов "нижних" слоёв, ничего плохого в этом не вижу. Мне непонятно почему проекты без использования IoC/DI автоматически считаются плохими по мнению некоторых. Мне кажется это не так. skyANAЭто же WCF сервис. То есть другой проект - это нечто иное Зачем писать второй WCF сервис для работы с сообщениями (message), если SvcMessage уже написан? Незачем. Зачем цеплять сборку WCF сервиса туда, где он не нужен? Тоже незачем.К SvcMessage может осуществляться доступ как удалённо через WCF, так и локально на сервере, обычным созданием этого класса оператором new или DI-контейнером, на любителя. Это обычный класс, имеющий атрибуты для работы с ним через WCF. skyANAПосмотрев остальной код проекта, прихожу к выводу, что DRY (don’t repeat yourself) у Вас и не пахнет.Перед тем как делать какие-то выводы обычно слушается мнение всех заинтересованных сторон. Укажите на места с "варварским копипастом" в этом проекте. Уверен, всему найдётся разумное объяснение. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 08:14 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КПо мотивам закрытого топика. skyANAКак Вы предлагете использовать сборку MessageServer.dll? Тупо референс на неё добавить? И что это даст?Вы правильно заметили, что:skyANAпропущено... Посмотрел на класс. Это действительно "часть кода для повторного использования", то есть в нём просто собранны методы, что используются в проекте более одного раза. Этакий глобальный хелпер для проекта.Речь шла о повторном использовании фрагментов логики именно внутри данного проекта (solution в терминологии VS). Повторное использование этой логики вне данного проекта не требуется. А для повторного использования внутри проекта - да, достаточно "тупо референс на неё добавить". Я не планирую использовать прикладной модуль MessageServer.dll где-то ещё кроме этого проекта. Значит я был прав и Вы поспешили задать свой вопрос "Как так?":Алексей КskyANA Посмотрел на класс. Это действительно "часть кода для повторного использования" , то есть в нём просто собранны методы, что используются в проекте более одного раза. Этакий глобальный хелпер для проекта. Копипаст, кстати, тоже можно назвать повторным использованием кода, а самый распространённый случай повторного использования кода — библиотеки, что позволяют использовать одни и теже компоненты в разных проектах. Последнее - это не Ваш случай. Как так? Алексей КЗдесь нет необходимости выделения прикладной логики в отдельный слой репозитариев для её отделения от слоя WCF-ных сервисов. Здесь нет необходимости в описании всего и вся интерфейсами с последующей интеграцией этого безобразия DI-контейнером.Почему если интерфейсы, то сразу DI? К примеру у Вас там есть автосгенерированный тип message, состояние экземпляра данного типа вызывающий код может изменить как угодно, т.к. все его свойства имеют публичные сеттеры. А если так: Код: c# 1. 2. 3. 4. 5. 6. 7.
Код: c# 1. 2. 3. 4. 5. 6. 7.
То получаем инкапсуляцию на уровне модели. Алексей КskyANAЭто же WCF сервис. То есть другой проект - это нечто иное Зачем писать второй WCF сервис для работы с сообщениями (message), если SvcMessage уже написан? Незачем. Зачем цеплять сборку WCF сервиса туда, где он не нужен? Тоже незачем.К SvcMessage может осуществляться доступ как удалённо через WCF, так и локально на сервере, обычным созданием этого класса оператором new ...Вы реально так делаете? Хотя чего это я спрашиваю. Выше Вы писали, что не планируете использовать прикладной модуль MessageServer.dll где-то ещё. Алексей КskyANAПосмотрев остальной код проекта, прихожу к выводу, что DRY (don’t repeat yourself) у Вас и не пахнет.Перед тем как делать какие-то выводы обычно слушается мнение всех заинтересованных сторон.Хорошо. Вы можете своими словами описать, какие компоненты внутри проекта выделены по принципу DRY и почему этого достаточно на Ваш взгляд? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 09:12 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAПочему если интерфейсы, то сразу DI?Не всегда, но часто. :-) skyANAК примеру у Вас там есть автосгенерированный тип message, состояние экземпляра данного типа вызывающий код может изменить как угодно, т.к. все его свойства имеют публичные сеттеры. А если так: Код: c# 1. 2. 3. 4. 5. 6. 7.
Код: c# 1. 2. 3. 4. 5. 6. 7.
То получаем инкапсуляцию на уровне модели.Эта "красота" вызовет в дальнейшем необходимость описания специального DTO, что нарушает моё представление о DRY, но об этом ниже. Одним словом - оно того не стоит. skyANAАлексей Кпропущено... К SvcMessage может осуществляться доступ как удалённо через WCF, так и локально на сервере, обычным созданием этого класса оператором new ...Вы реально так делаете?Внутри проекта - да, такие случаи были, но редко. Негативных эффектов от такого использования замечено не было. skyANAАлексей Кпропущено... Перед тем как делать какие-то выводы обычно слушается мнение всех заинтересованных сторон.Хорошо. Вы можете своими словами описать, какие компоненты внутри проекта выделены по принципу DRY и почему этого достаточно на Ваш взгляд?Думаю, все. Основная цель - не писать несколько раз одно и то же. Везде где можно применяется кодогенерация. Бизнес-объекты слоя данных и логики применяются в том числе в качестве DTO, чтобы не описывать одинаковые структуры данных в нескольких местах. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 09:52 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAВы можете своими словами описать, какие компоненты внутри проекта выделены по принципу DRY и почему этого достаточно на Ваш взгляд?Или Вы хотели увидеть все компоненты, выделенные отдельно для повторного использования? Я немного не понял вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 10:07 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КВезде где можно применяется кодогенерация. Бизнес-объекты слоя данных и логики применяются в том числе в качестве DTO, чтобы не описывать одинаковые структуры данных в нескольких местах. а можно пример? Возьму на заметочку ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 10:26 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanАлексей КВезде где можно применяется кодогенерация. Бизнес-объекты слоя данных и логики применяются в том числе в качестве DTO, чтобы не описывать одинаковые структуры данных в нескольких местах. а можно пример? Возьму на заметочку Бизнес-объекты сгенерированного по БД слоя данных помечены WCF-ными атрибутами и передаются на клиента, например тут (метод GetPersonalEditByID) . Там же содержатся рукописные бизнес-объекты слоя логики (например класс PersonalView), которые так же имеют WCF-ные атрибуты и отдаются клиенту. На клиенте эти классы имеют "двойников", сгенерированных по WSDL . ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 10:44 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КВезде где можно применяется кодогенерация Чем генерите? T4 или каким-либо платным продуктом типа CodeSmith? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 11:10 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Arm79Алексей КВезде где можно применяется кодогенерация Чем генерите? T4 или каким-либо платным продуктом типа CodeSmith?Запускаю из T4 Text Template. Но некоторые части кодогенератора описаны в виде сборок (assembly), скомпилированных отдельно. 1. Подробности по генерации контекста базы данных Entity Framework. 2. Подробности по генерации WCF-клиентов. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 11:15 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей К, авторАвтоматическое закрытие соединения из финализатора, на случай, если в прикладном коде не производится явное закрытие соединения в следствие ошибки. ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 11:24 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Где-то в степиАлексей К, авторАвтоматическое закрытие соединения из финализатора, на случай, если в прикладном коде не производится явное закрытие соединения в следствие ошибки. ???Например, SqlConnection из финализатора закрывает соединение, если до этого ему не вызвали Close или Dispose. В WCF Channel такого почему-то нет. Если явно не закрыть соединение - оно остаётся "навсегда". Поэтому добавил закрытие из финализатора навсякий. Можно ещё добавить вывод сообщения в лог. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 11:28 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей К, это косноязычно, и наводит на мысль что финализатор вызовется в период жизни приложения в обязательном порядке а не только при его закрытии.. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 11:35 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Где-то в степиАлексей К, это косноязычно, и наводит на мысль что финализатор вызовется в период жизни приложения в обязательном порядке а не только при его закрытии..Ну все же знают когда вызывается финализатор. Мне кажется тут уточнение не требуется. Впрочем, я поправил формулировку. Согласен что было "так себе". Вроде стало лучше: автор* Автоматическое закрытие соединения из финализатора на случай, если закрытие соединения не производится явно из-за ошибки в прикладном коде. зы: Недавно поймал себя на мысли, что я совершенно разучился писать по-русски. Постепенно навёрстываю упущенное. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 11:43 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей К, авторНу все же знают когда вызывается финализатор ну уж вы погорячились, половина не знает или думает что только при удалении объекта коллектором, без внимания реализует ли тип IDisposable, и он в общем то может и никогда не вызваться окромя закрытия программы. У меня вопрос, а что вы носитеь с этим закрытием соединения, в чем тут сокральная изюминка, или вы используете ресурсы ядра для этого даже внедрили IDisposable, не могу уловить мысль??? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 11:50 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Где-то в степиАлексей К, авторНу все же знают когда вызывается финализатор ну уж вы погорячились, половина не знает или думает что только при удалении объекта коллектором, без внимания реализует ли тип IDisposable, и он в общем то может и никогда не вызваться окромя закрытия программы.Текст ориентирован на подготовленного читателя. :-) Где-то в степиУ меня вопрос, а что вы носитеь с этим закрытием соединения, в чем тут сокральная изюминка, или вы используете ресурсы ядра для этого даже внедрили IDisposable, не могу уловить мысль??? У меня много случаев, когда нужно дёрнуть только один метод вебсервиса. Без дополнительных костылей правильный вызов выглядит как-то так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
С костылями так: Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 12:06 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Ну и незакрытые соединения плохо влияют на WCF-сервер, поэтому добавил закрытие из финализатора. Благо, в WPF-приложении сборка мусора производится достаточно часто. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 12:12 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Где-то в степидля этого даже внедрили IDisposable IDisposable позволяет делать так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
В чистом виде WCF-ный канал (и клиент) нельзя использовать с using. Там метод Dispose может генерить исключение со всеми вытекающими. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 12:19 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей К, авторплохо влияют на WCF-сервер это как? ведь в вашем случае соединение устанавливается через службу Net.TCP, ( одну на все приложения) вы кода абортируетесь или закрываете там просто исчезает ссылка на ваш поток и урл в таблице маршрутизации , внешний сокет, как был на прослушке - так и останется ( на вашем компе) а сервер хоста вообще может уйти в спячку, если его не пинать просьбами... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 12:57 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
автор внешний сокет, как был на прослушке тут я погорячился, ну воспримем это в общих чертах ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 13:02 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Где-то в степиАлексей К, авторплохо влияют на WCF-сервер это как? ведь в вашем случае соединение устанавливается через службу Net.TCP, ( одну на все приложения) вы кода абортируетесь или закрываете там просто исчезает ссылка на ваш поток и урл в таблице маршрутизации , внешний сокет, как был на прослушке - так и останется ( на вашем компе) а сервер хоста вообще может уйти в спячку, если его не пинать просьбами...В том-то и дело, что из-за ошибки в прикладном коде клиента сетевой пакет с командой закрытия соединения на сервер может не прийти и сервер будет считать, что соединение открыто. Ну забыли на клиенте вызвать Close или Dispose, с кем не бывает. :-) Вероятно, на сервере должен быть какой-то таймоут на отсутствие активности соединения с клиента, но я более детально не изучал этот вопрос. Тем более, у нас с этим были проблемы на начальном этапе разработки. При их решении в том числе был добавлен и финализатор. В общем, с финализатором как-то спокойнее. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 13:08 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей Кnetivanпропущено... а можно пример? Возьму на заметочку Бизнес-объекты сгенерированного по БД слоя данных помечены WCF-ными атрибутами и передаются на клиента, например тут (метод GetPersonalEditByID) . Там же содержатся рукописные бизнес-объекты слоя логики (например класс PersonalView), которые так же имеют WCF-ные атрибуты и отдаются клиенту. На клиенте эти классы имеют "двойников", сгенерированных по WSDL . вот это DTO и называется? Смотрите: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
PersonalView это же и есть ваш бизнес-объект, а в контексте БД (DbMainFactory.Scope) другой объект. Имеется разделение. А вы говорите, нет дублирования. Я как-то не так понял мысль? И поделитесь вашей proxy wcf с финализатором :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 14:47 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей К2. Подробности по генерации WCF-клиентов. Вопрос немного не по теме (генерации), но мне показался достаточно важным Фабрика сетевых службКлиенты сетевых служб создаются с помощью фабрики, расположенной в классе WsFactory. ... Метод GetChannel содержит создание канала (Channel), используемого для взаимодействия с сервером... Каждый раз для создания канала создается фабрика, но создание фабрики вроде как дорогостоящая операция (по сравнению с созданием канала)... почему бы не закэшировать фабрику? P.S. Алексей, спасибо за Ваши труды на благо сообщества! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 15:17 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanPersonalView это же и есть ваш бизнес-объект, а в контексте БД (DbMainFactory.Scope) другой объект. Имеется разделение. А вы говорите, нет дублирования. Я как-то не так понял мысль? PersonalView - это класс, описывающий структуру данных элемента списка формы "Персонал". personal - класс, описывающий таблицу в базе данных. Это разные сущности в системе. Да, какие-то поля в них дублируются, но эти классы скорее разные чем одинаковые. Более того, я не уверен, что при добавлении полей в таблицу в базе данных я захочу увидеть автоматическое добавление полей в элемент списка формы. Поэтому было решено сделать класс PersonalView "с нуля", чем использовать при его описании класс personal. Конечно, можно сделать и так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
В каких-то случаях именно так и делается, но не в этом. netivanИ поделитесь вашей proxy wcf с финализатором :) Исходник Описание ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 15:31 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
LRАлексей К2. Подробности по генерации WCF-клиентов. Вопрос немного не по теме (генерации), но мне показался достаточно важным Фабрика сетевых службКлиенты сетевых служб создаются с помощью фабрики, расположенной в классе WsFactory. ... Метод GetChannel содержит создание канала (Channel), используемого для взаимодействия с сервером... Каждый раз для создания канала создается фабрика, но создание фабрики вроде как дорогостоящая операция (по сравнению с созданием канала)... почему бы не закэшировать фабрику?В следующих версиях WCF они обещали оптимизировать создание ChannelFactory<>, где-то была статья об этом. Вероятно в 4.5 это уже оптимизировано. Проверить это у меня сейчас нет возможности. При повторном использовании одного объекта фабрики для создания нескольких Channel-ов возникали проблемы. Какие - я сейчас точно не вспомню, надо опять делать тест и читать MSDN. Но точно помню, что проблемы были, что-то там не работало. :-) LRP.S. Алексей, спасибо за Ваши труды на благо сообщества!Пасиб. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 15:41 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КnetivanPersonalView это же и есть ваш бизнес-объект, а в контексте БД (DbMainFactory.Scope) другой объект. Имеется разделение. А вы говорите, нет дублирования. Я как-то не так понял мысль? PersonalView - это класс, описывающий структуру данных элемента списка формы "Персонал". personal - класс, описывающий таблицу в базе данных. Это разные сущности в системе. Да, какие-то поля в них дублируются, но эти классы скорее разные чем одинаковые. Более того, я не уверен, что при добавлении полей в таблицу в базе данных я захочу увидеть автоматическое добавление полей в элемент списка формы. Поэтому было решено сделать класс PersonalView "с нуля", чем использовать при его описании класс personal. Конечно, можно сделать и так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
В каких-то случаях именно так и делается, но не в этом. netivanИ поделитесь вашей proxy wcf с финализатором :) Исходник Описание 1. с PersonalView все ясно, я мысль не так понял 2. с каналом интересно.Только IDisposable как-то не по паттерну с МСДН, непрвычно видеть без флага) надо все исходники посмотреть. Асинхронное выполнение заинтересовало. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2013, 16:14 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
LRКаждый раз для создания канала создается фабрика, но создание фабрики вроде как дорогостоящая операция (по сравнению с созданием канала)... почему бы не закэшировать фабрику? Если закешировать, оно в принципе работает. Но тогда нет возможности изменить параметры соединения у фабрики. Она этого не позволяет после создания хотя бы одного канала с помощью неё. Чисто визуально разницы в работе приложения с кэшированием я не заметил. Из-за дополнительных ограничений для себя решил кэширование не делать. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 07:24 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КLRпропущено... Вопрос немного не по теме (генерации), но мне показался достаточно важным пропущено... Каждый раз для создания канала создается фабрика, но создание фабрики вроде как дорогостоящая операция (по сравнению с созданием канала)... почему бы не закэшировать фабрику?В следующих версиях WCF они обещали оптимизировать создание ChannelFactory<>, где-то была статья об этом. Вероятно в 4.5 это уже оптимизировано. Проверить это у меня сейчас нет возможности. При повторном использовании одного объекта фабрики для создания нескольких Channel-ов возникали проблемы. Какие - я сейчас точно не вспомню, надо опять делать тест и читать MSDN. Но точно помню, что проблемы были, что-то там не работало. :-) LRP.S. Алексей, спасибо за Ваши труды на благо сообщества!Пасиб. :-) А зачем создавать несколько ChannelFactory, если это обобщенный класс? ChannelFactory - это пул соединений, какие причины плодить их на клиенте? Не хочется статиков? Так для этого есть DI, который ты не осилил и без которого не бывает вменяемых фреймворков. В net 4.5 его действительно оптимизировали и соединения кэшируются даже если меняется учетка. Помимо этого в wcf появилаcь нативная поддержка тасков и твои танцы с бубнами(FromAsync) совсем не нужны, а мультики в сервисах с ThreadStatic - просто вредны. EF теперь тоже асинхронный и сервисы можно и нужно делать с тасками. Это гораздо больше будет влиять на wcf сервисы, чем твои мультики с прокси на клиенте. Генерить последние - полный маразм для внутренних сервисов и тд. ЗЫ SOLID придумали не на пустом месте - это набор принципов, которые нужно соблюдать, чтобы можно было без геморроя развивать систему и вносить в нее изменения, если этого нет, то это кривая архитектура. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 09:32 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КLRКаждый раз для создания канала создается фабрика, но создание фабрики вроде как дорогостоящая операция (по сравнению с созданием канала)... почему бы не закэшировать фабрику? Если закешировать, оно в принципе работает. Но тогда нет возможности изменить параметры соединения у фабрики. Она этого не позволяет после создания хотя бы одного канала с помощью неё. Чисто визуально разницы в работе приложения с кэшированием я не заметил. Из-за дополнительных ограничений для себя решил кэширование не делать. Код: 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.
Это бред. Дорогостоящая операция - создание соединения, их как раз и кэширует фабрика. Матчасть нужно знать ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 09:36 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVaА зачем создавать несколько ChannelFactory, если это обобщенный класс?Этого не понял. SeVaChannelFactory - это пул соединений, какие причины плодить их на клиенте?Мне казалось NetTCP пул соединений живёт вне объекта ChannelFactory, так же как пул соединений к БД живёт вне объекта SqlConnection. SeVaВ net 4.5 его действительно оптимизировали и соединения кэшируются даже если меняется учетка. Помимо этого в wcf появилаcь нативная поддержка тасков и твои танцы с бубнами(FromAsync) совсем не нужныНу мне-то от этого не легче. Мне нужна поддержка WinXP. SeVaа мультики в сервисах с ThreadStatic - просто вредны. EF теперь тоже асинхронный и сервисы можно и нужно делать с тасками.А мне с ThreadStatic нравится. И от асинхронностей на сервере для своих проектов я пользы не вижу. Только неоправданное усложнение. SeVaЭто гораздо больше будет влиять на wcf сервисы, чем твои мультики с прокси на клиенте. Генерить последние - полный маразм для внутренних сервисов и тд.Я не хочу использовать серверные классы на клиенте. Мне больше нравится их генерировать через WSDL. И на то есть причины. SeVaЗЫ SOLID придумали не на пустом месте - это набор принципов, которые нужно соблюдать, чтобы можно было без геморроя развивать систему и вносить в нее изменения, если этого нет, то это кривая архитектура.Ну используй, я не возражаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 09:45 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVaАлексей Кпропущено... Если закешировать, оно в принципе работает. Но тогда нет возможности изменить параметры соединения у фабрики. Она этого не позволяет после создания хотя бы одного канала с помощью неё. Чисто визуально разницы в работе приложения с кэшированием я не заметил. Из-за дополнительных ограничений для себя решил кэширование не делать. Код: 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.
Это бред. Дорогостоящая операция - создание соединения, их как раз и кэширует фабрика. Матчасть нужно знатьНу, а там что закешировано? Жжошь? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 09:46 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КSeVaпропущено... Это бред. Дорогостоящая операция - создание соединения, их как раз и кэширует фабрика. Матчасть нужно знатьНу, а там что закешировано? Жжошь? Учи матчасть, что из себя представляет канальная фабрика подробно разжевано в msdn. WCF основан на каналах , а это целое кино. Без понимания, которого появляются маразмы и отжиги со статиками для channelfactory ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 09:56 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVaУчи матчасть, что из себя представляет канальная фабрика подробно разжевано в msdn. WCF основан на каналах , а это целое кино. Без понимания, которого появляются маразмы и отжиги со статиками для channelfactoryФраза "connection pool" в тексте этой статьи не найдена. Зачем ты дал на неё ссылку? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 10:06 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КА мне с ThreadStatic нравится. И от асинхронностей на сервере для своих проектов я пользы не вижу. Только неоправданное усложнение. SeVaЭто гораздо больше будет влиять на wcf сервисы, чем твои мультики с прокси на клиенте. Генерить последние - полный маразм для внутренних сервисов и тд.Я не хочу использовать серверные классы на клиенте. Мне больше нравится их генерировать через WSDL. И на то есть причины. 1. Причины сразу видны, если провести хотя бы раз нагрузочное тестирование. ThreadStatic на данный момент, когда есть await - натуральное убожество и костыль, которые все усложняет в разы с малопонятным поведением и устойчивостью 2. Никаких причин нет, тк генерим только мусор и повторно создаем классы и интерфейсы. Подозреваю, что все это из-за извратов с наследованием и прочих мультиков, так это тоже маразм. Гораздо проще создать view в бд и на автомате использовать EF, а не вышивать крестиком вручную собирая классы. Никакого наследования в DTO(бизнес-классами у тебя даже не пахнет) быть не должно, рано или поздно функционал разбежится по разным углам. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 10:06 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КSeVaУчи матчасть, что из себя представляет канальная фабрика подробно разжевано в msdn. WCF основан на каналах , а это целое кино. Без понимания, которого появляются маразмы и отжиги со статиками для channelfactoryФраза "connection pool" в тексте этой статьи не найдена. Зачем ты дал на неё ссылку? Чтобы ты хотя слегка имел представление о wcf. Эта статья для чайников ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 10:07 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVa тынц автор.NET Framework 4.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 10:12 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КSeVaChannelFactory - это пул соединений, какие причины плодить их на клиенте?Мне казалось NetTCP пул соединений живёт вне объекта ChannelFactory, так же как пул соединений к БД живёт вне объекта SqlConnection.Так и есть. Netstat.exe показывает, что WCF-ный NetTCP пул соединений на клиенте работает нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 11:33 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVaАлексей К, Алексей Кпропущено... пропущено... Фабрика каналов была и есть в net 3.5.Ну и что? Там оптимизации про которые ты пишешь добавлены, и про которые я тоже писал , добавлены в 4.5. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 11:49 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КSeVaАлексей К, пропущено... Фабрика каналов была и есть в net 3.5.Ну и что? Там оптимизации про которые ты пишешь добавлены, и про которые я тоже писал , добавлены в 4.5. ChannelFactory был еще со времен net 3.5. В wpf&wcf большие возможности, посему они за раз не осваиваются, правильные подходы тем более. Посему лучше не изобретать свои велосипеды(в особенности, когда скачешь только по верхам и глубоко не копаешь), а брать готовое. Все давно придумано до нас. Например, Exception Handling WCF Proxy Generator . Есть интеграция с vs и восстановление при сбоях. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 12:13 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVa, круто давать ссылки на проекты,не обновляющиеся 3 года и имеющие статус бета. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 13:31 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Говнокостыли нужны вам, вы привыкли только кнопочки в студии нажимать без всякого понимания. В одном резюме попалась фраза : "с# на уровне пользователя". Сапотски тоже про себя мог бы это написать ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 13:45 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVaВ одном резюме попалась фраза : "с# на уровне пользователя". Сапотски тоже про себя мог бы это написать Ну мог бы чо... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 13:48 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КЕсли закешировать, оно в принципе работает. Но тогда нет возможности изменить параметры соединения у фабрики. Она этого не позволяет после создания хотя бы одного канала с помощью неё. Чисто визуально разницы в работе приложения с кэшированием я не заметил. Из-за дополнительных ограничений для себя решил кэширование не делать. Алексей, спасибо за разъяснения. Получается, без кэширования оно и надежней (мало ли что случится с фабрикой) и гибче (например, пользователь "на лету" сможет перелогиниться и т.п.)... а проблема производительности - это особый случай/задача (не Ваш случай). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 14:19 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
ребятки, подхалтурить не желаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 14:25 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
2 часа и ни одного резюме. Ну и куда прикажете деньги девать...? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 15:14 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
hr_hr_hr2 часа и ни одного резюме. Ну и куда прикажете деньги девать...? Вложите туда где нет слова - азуре. На сегодня это глючная херь с которой никто не хочет связываться. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 15:32 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
James Bond FR, да мне не принципиально где хостить. Да и азур хлопот не доставлял(кроме аптайма блобов) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2013, 15:39 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КЭта "красота" вызовет в дальнейшем необходимость описания специального DTO, что нарушает моё представление о DRY, но об этом ниже. Одним словом - оно того не стоит.Алексей КБизнес-объекты слоя данных и логики применяются в том числе в качестве DTO, чтобы не описывать одинаковые структуры данных в нескольких местах.Всё это замечательно работает пока один формат хранения данных, один формат их передачи, один способ получения. Но что будет, если при развитии проекта, что-то добавится, или изменится? Насколько Ваше решение гибкое и масштабируемое? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 09:30 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, а что помешает навернуть новую логику на его "контрактный" класс? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 11:00 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, помешает то, что нельзя быстро и незаметно добавить или изменить формат хранения данных, формат их передачи, способ получения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 13:34 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivan, помешает то, что нельзя быстро и незаметно добавить или изменить формат хранения данных, формат их передачи, способ получения. давайте на примере. А то это все аюстрактоно. Сейчас имеем: репозиторий, который возвращает бизнес-объекты. имеется возможность быстро это передать по WCF, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 14:50 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAnetivan, помешает то, что нельзя быстро и незаметно добавить или изменить формат хранения данных, формат их передачи, способ получения.Сейчас имеем: репозиторий, который возвращает бизнес-объекты. имеется возможность быстро это передать по WCF, например.Сейчас нет репозитория и бизнес-объектов. Последние по идее инкапсулируют в себе необходимую логику предметной области, а мы видим вместо инкапсуляции набор хелп-методов. netivanдавайте на примере. А то это все аюстрактоно.Хм. Как вы понимаете сл. фразу: "быстро и незаметно добавить или изменить формат хранения данных, формат их передачи, способ получения"? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 16:21 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivanпропущено... Сейчас имеем: репозиторий, который возвращает бизнес-объекты. имеется возможность быстро это передать по WCF, например.Сейчас нет репозитория и бизнес-объектов. Последние по идее инкапсулируют в себе необходимую логику предметной области, а мы видим вместо инкапсуляции набор хелп-методов. netivanдавайте на примере. А то это все аюстрактоно.Хм. Как вы понимаете сл. фразу: "быстро и незаметно добавить или изменить формат хранения данных, формат их передачи, способ получения"? наверное мы о разных вещах. Я там увидел репозиторий - набор методов, осуществляющие манипуляции с бизнес объектами. Чем вам не репозиторий? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 16:38 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, какой конкретно класс по Вашему реализует шаблон репозиторий? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 16:41 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, обратимся к определению: Repository . П. 1A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection. П. 2Repository also supports the objective of achieving a clean separation and one-way dependency between the domain and data mapping layers. С натяжкой можно сказать, что первый пункт выполняется, если предположить, что DTO объекты типа PersonalView и есть доменные объекты. Но вот второй пункт не выполняется. Смотрите методы GetPersonalEditNew, GetPersonalEditByID и SavePersonal. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 18:06 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Ну и если говорить о SOLID, то явное нарушение принципа Single responsibility: класс и репозиторий, и маппер, и сервис. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 18:08 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivan, обратимся к определению: Repository . П. 1A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection. П. 2Repository also supports the objective of achieving a clean separation and one-way dependency between the domain and data mapping layers. С натяжкой можно сказать, что первый пункт выполняется, если предположить, что DTO объекты типа PersonalView и есть доменные объекты. Но вот второй пункт не выполняется. Смотрите методы GetPersonalEditNew, GetPersonalEditByID и SavePersonal. да, нарушения есть в этих методах. Но разве это так страшно? Да и откровенно говоря всегда ли там безнес-объекты ( тут это же DTO вроде?) так сильно отличаются от объектов в БД?:) Судя по ссылки выше у ТС они не отличаются. А строго следовать определению какого-то паттерна имхо ненужно. Вот. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 18:16 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей КЭта "красота" вызовет в дальнейшем необходимость описания специального DTO, что нарушает моё представление о DRY, но об этом ниже. Одним словом - оно того не стоит.Алексей КБизнес-объекты слоя данных и логики применяются в том числе в качестве DTO, чтобы не описывать одинаковые структуры данных в нескольких местах.Всё это замечательно работает пока один формат хранения данных, один формат их передачи, один способ получения.Например, добавим второй WCF ServiceHost для второго протокола. Прикладной код от этого не изменится. skyANAНо что будет, если при развитии проекта, что-то добавится, или изменится? Насколько Ваше решение гибкое и масштабируемое? Нужен пример. В противном случае ответ будет: "Решение очень гибкое и очень масштабируемое". :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 19:31 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivan, обратимся к определению: Repository . П. 1A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection. П. 2Repository also supports the objective of achieving a clean separation and one-way dependency between the domain and data mapping layers. С натяжкой можно сказать, что первый пункт выполняется, если предположить, что DTO объекты типа PersonalView и есть доменные объекты. Но вот второй пункт не выполняется. Смотрите методы GetPersonalEditNew, GetPersonalEditByID и SavePersonal.Ну и пусть класс там чему-то не соответствует. Хуже он от этого не становится. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 19:33 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAНу и если говорить о SOLID, то явное нарушение принципа Single responsibility: класс и репозиторий, и маппер, и сервис.SvcPersonal - класс, содержащий логику. PersonalView - класс, содержащий данные. Никакого нарушения SRP тут нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 19:35 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivan, помешает то, что нельзя быстро и незаметно добавить или изменить формат хранения данных, формат их передачи, способ получения.Повторюсь, WCF это позволяет. Это что касается передачи. Что касается хранения и обработки - проект жёстко завязан на EF, отказываться от него смысла не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2013, 19:43 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей К"Решение очень гибкое и очень масштабируемое". :-) Алексей Кпроект жёстко завязан на EF ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2013, 12:20 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Интересно, сколько лет будет жить сей проект. Сколько вообще лет существуют ваши продукты. Хотя нет, не интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2013, 12:24 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, Ну это же корпоративное решение, усугубленное ж.д. тематикой, выставленное наружу, т.е. вполне может жить ( если компилится).. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2013, 13:31 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Где-то в степи, я это прекрасно понимаю и нигде не писал, что решение не имеет права жить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2013, 13:56 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, Хорош качели раскачивать -"вполне может жить " глобальная переменная, к вашему стеку отношения не имеет. зы Это лозунг... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2013, 14:02 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Где-то в степи, что понимается под "вашим стеком"? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2013, 14:08 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAnetivan, обратимся к определению: Repository . пропущено... пропущено... С натяжкой можно сказать, что первый пункт выполняется, если предположить, что DTO объекты типа PersonalView и есть доменные объекты. Но вот второй пункт не выполняется. Смотрите методы GetPersonalEditNew, GetPersonalEditByID и SavePersonal. да, нарушения есть в этих методах. Но разве это так страшно? Да и откровенно говоря всегда ли там безнес-объекты ( тут это же DTO вроде?) так сильно отличаются от объектов в БД?:) Судя по ссылки выше у ТС они не отличаются. А строго следовать определению какого-то паттерна имхо ненужно. Вот. Когда у тебя будет хотя бы за сотню объектов, то без обобщенного репозитория, без возможности пересобрать на автомате все классы и создать необходимые сервисы, тебе очень быстро станет не страшно, а тошно. Это игрушки в ООП там, где его не должно быть и ручное вышивание крестиком на ровном месте. Фреймворк с одной только жесткой связанностью без гибкости в членах, который не упрощает и не ускоряет разработку. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2013, 10:21 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANASeVaВряд ли у вас получиться что-либо доказать силой мысли. Нужны конкретные примеры. Упражнения в красноречии и разговоры о сферических конях не интересны. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2013, 17:33 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
SeVa, ты много читаешь и изучаешь- какие шансы у Microsoft StreamInsight в роли AppServerа? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2013, 19:04 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANASeVaВряд ли у вас получиться что-либо доказать силой мысли. Нужны конкретные примеры. Упражнения в красноречии и разговоры о сферических конях не интересны. Алексей, я в эти игры играю давно, уже сделан не один проект и знаю о чем говорю. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2013, 20:08 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Сахават ЮсифовSeVa, ты много читаешь и изучаешь- какие шансы у Microsoft StreamInsight в роли AppServerа? StreamInsight решает достаточно ограниченный круг задач - потоки данных и их обработка. В качестве app server'a больше подходит owin/katana/web api. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2013, 20:14 |
|
О применении 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 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAData Mapping - это не ответсвенность репозитория.Особенно Mapping DbDataReader => Object. skyANAПодозреваю, что в большинстве Ваших случаев репозиторий вообще не нужен.Звучит осуждающе.Ну вот Вам достаточно Data Mapper . Осуждать тут нечего. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:23 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Особенно Mapping DbDataReader => Object. пропущено... Звучит осуждающе.Ну вот Вам достаточно Data Mapper . Осуждать тут нечего.Звучит зловещще. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:25 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Ну вот Вам достаточно Data Mapper . Осуждать тут нечего.Звучит зловещще. :-)Вы мнительный человек? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:26 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAПочему так? Потому что у нас основное хранилище - это Sql Server. Часть данных/сущностей/Entity хранится в MongoDB. Часть данных/сущностей/Entity необходимо кэшировать. Часть данных/сущностей/Entity, что хранится в MongoDB участвует в транзакциях, а монго их не поддерживает. Необходима своя реализация.А у нас в квартире газ... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:26 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Звучит зловещще. :-)Вы мнительный человек?Топик про SOLID или мою мнительность? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:28 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAПочему так? Потому что у нас основное хранилище - это Sql Server. Часть данных/сущностей/Entity хранится в MongoDB. Часть данных/сущностей/Entity необходимо кэшировать. Часть данных/сущностей/Entity, что хранится в MongoDB участвует в транзакциях, а монго их не поддерживает. Необходима своя реализация.А у нас в квартире газ...ЧТД. Выше я писал, что у тем, у кого в квартире только газ, не понять. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:30 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Вы мнительный человек?Топик про SOLID или мою мнительность?Про SOLID. Так что поверьте мне на слово, что в моих словах нет ничего зловещего, и вернёмся к сабжу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:32 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... А у нас в квартире газ...ЧТД. Выше я писал, что у тем, у кого в квартире только газ, не понять.Вы правда верите, что я не могу себе представить ситуацию, в которой репозитарий действительно нужен? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:35 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAчто в моих словах нет ничего зловещегоА в моих словах один сарказм, никакой мнительности. Уж поверьте. :-) skyANAвернёмся к сабжуДа. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:37 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... ЧТД. Выше я писал, что у тем, у кого в квартире только газ, не понять.Вы правда верите, что я не могу себе представить ситуацию, в которой репозитарий действительно нужен?Вы уже не раз писали, что если бы у вас было вот так, или сяк, то репозиторий был бы нужен. Так что какое-то представление Вы имеете. Но по всей видимости у Вас нет необходимого практического опыта таких проектов, чтобы произвести качественную оценку. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:43 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Вы правда верите, что я не могу себе представить ситуацию, в которой репозитарий действительно нужен?Вы уже не раз писали, что если бы у вас было вот так, или сяк, то репозиторий был бы нужен. Так что какое-то представление Вы имеете. Но по всей видимости у Вас нет необходимого практического опыта таких проектов, чтобы произвести качественную оценку. очень интересно, если репозиторий не занимается маппингом, то кто им занимается? Или репозиторий все же опреирует доменными объектами (читай объектами EF)? Что будет в виде Т в этом интерфейсе (IRepository<T>?) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:48 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Вы правда верите, что я не могу себе представить ситуацию, в которой репозитарий действительно нужен?Вы уже не раз писали, что если бы у вас было вот так, или сяк, то репозиторий был бы нужен. Так что какое-то представление Вы имеете.На это способен любой автор, владеющий общими принципами ООП и здравым смыслом. Для этого много ума не надо. skyANAНо по всей видимости у Вас нет необходимого практического опыта таких проектов, чтобы произвести качественную оценку.По всей видимости мы обсуждаем конкретный проект а не коня в вакууме, но меня не перестаёт удивлять Ваше высокомерие, даже немного нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:54 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanочень интересно, если репозиторий не занимается маппингом, то кто им занимается? Или репозиторий все же опреирует доменными объектами (читай объектами EF)? Что будет в виде Т в этом интерфейсе (IRepository<T>?)Не нужно искать смысл там где его нет. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:56 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAпропущено... Вы уже не раз писали, что если бы у вас было вот так, или сяк, то репозиторий был бы нужен. Так что какое-то представление Вы имеете. Но по всей видимости у Вас нет необходимого практического опыта таких проектов, чтобы произвести качественную оценку. очень интересно, если репозиторий не занимается маппингом, то кто им занимается? Или репозиторий все же опреирует доменными объектами (читай объектами EF)? Что будет в виде Т в этом интерфейсе (IRepository<T>?)Мы ходим по кругу. Вот ссылка на определение: Repository (Репозиторий) . Цитирую:Описание Repository Посредничает между уровнями области определения и распределения данных (domain and data mapping layers), используя интерфейс, схожий с коллекциями для доступа к объектам области определения.T - это тип доменного объекта (объекта области определения), или иначе бизнес-объекта. А маппингом занимается маппер. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 11:59 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей Кnetivanочень интересно, если репозиторий не занимается маппингом, то кто им занимается? Или репозиторий все же опреирует доменными объектами (читай объектами EF)? Что будет в виде Т в этом интерфейсе (IRepository<T>?)Не нужно искать смысл там где его нет. :-) просто я не понимаю тогда смысл наезда от товарища. Кроме чего-то типа "надо делать так" и если вы не согласны, то вам это не по "уму". Как по мне, то репозитория на базе объектов Ef хватает сполна. Если нужна супер бизнес транзакция, не вижу в этом противоречия. Будет вам еще одна едицина работы на базе этого репозитория. А что он вернет назовите хоть горшком. Зачем для этого бестоклу мапить объекты ? Из-за гипотетической возможности, что у нас БД изменится завтра резко? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:00 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanпросто я не понимаю тогда смысл наезда от товарища.Я тоже. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:04 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей Кnetivanпросто я не понимаю тогда смысл наезда от товарища.Я тоже. :-)Потому как нет никакого наезда. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:05 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей Кnetivanпросто я не понимаю тогда смысл наезда от товарища.Я тоже. :-) Товарещ пишет всё правильно, просто вы не хотите внять сути ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:15 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Я тоже. :-)Потому как нет никакого наезда. :)Хорошо, если так. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:18 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanАлексей Кпропущено... Не нужно искать смысл там где его нет. :-) просто я не понимаю тогда смысл наезда от товарища.А процитируйте мой наезд, я перефразирую свою мысль, чтобы было понятно, что я хотел сказать, и она не вызывала ошибочного толкования. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:19 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanЗачем для этого бестоклу мапить объекты?Не понял вопроса. Маппить надо, потому что структура хранения в БД отличается от структуры бизнес-объектов. netivanИз-за гипотетической возможности, что у нас БД изменится завтра резко?Нет :) Не гипотетических предположениях о том, как будет развиваться проект, денег не заработаешь. Скорее случится фейл. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:32 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivanЗачем для этого бестоклу мапить объекты?Не понял вопроса. Маппить надо, потому что структура хранения в БД отличается от структуры бизнес-объектов. netivanИз-за гипотетической возможности, что у нас БД изменится завтра резко?Нет :) Не гипотетических предположениях о том, как будет развиваться проект, денег не заработаешь. Скорее случится фейл. вот в авторМаппить надо, потому что структура хранения в БД отличается от структуры бизнес-объектов. этом вся соль. А если не отличается?(очень похожа)? Возьмем известный пример бд Northwind. Что там маппить будете? Покажите мастер-класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:36 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAпропущено... Не понял вопроса. Маппить надо, потому что структура хранения в БД отличается от структуры бизнес-объектов. пропущено... Нет :) Не гипотетических предположениях о том, как будет развиваться проект, денег не заработаешь. Скорее случится фейл. вот в авторМаппить надо, потому что структура хранения в БД отличается от структуры бизнес-объектов. этом вся соль. А если не отличается?(очень похожа)? Возьмем известный пример бд Northwind. Что там маппить будете? Покажите мастер-класс.Тоже что маппится внутри EF :) Вы же не думаете, что внутри EF преобразование реляционных данных в объекты реализовано каким-то другим чудесным образом, так ведь? Вообщем Вы наверное хотели спросить: зачем нужно выделять отдельные бизнес-объекты, не связанные с EF и маппить данные на них? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:45 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, да, мы же ведет дискуссию про объекты EF и новые бизнес-объекты. Я вот спросил на примере конкретной БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:58 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANA, да, мы же ведет дискуссию про объекты EFПозволю себе некоторую иронию: Работа с объектами (платформа Entity Framework) . Интересно, зачем в EF поддерживается четыре типа сущностей: EntityObject, POCO, Прокси POCO и Сущности с самостоятельным отслеживанием? Разве одного типа не достаточно для большинства проектов? Сам я с EF не работал, поэтому хотелось бы услышать Ваши комментарии. netivanЯ вот спросил на примере конкретной БД.К сожалению я не работал с БД Northwind и не знаком с её структурой. Насколько я знаю, это учебная база от MS. Фишка в том, что в институте на лабах у нас была Delphi Paradox Database, карьеру я начал с Oracle, а когда столкнулся с Sql Server, то учебные базы ковырять уже не имело смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 13:15 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Друзья, вообще солид - это УГ. Всё, все по домам. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 13:46 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, что-то в тупик меня поставили. Я кстати не особый знаток ЕФ,достаточно давно с ним работал. Но если честно не вижу для нашей беседы разницы в тех походах. А про БД Northwind вы загнули она достаточно типичная. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 14:33 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, что я загнул про БД Northwind? Что не работал с ней? Действительно не работал. Убедите меня в обратном. Погуглил:technet.microsoft.comThe Northwind and pubs sample databases are not installed by default in Microsoft SQL Server.technet.microsoft.comThe AdventureWorks2008R2 sample databases that are used in the code examples in SQL Server Books Online can be downloaded from the Microsoft SQL Server Samples and Community Projects home page.Это я к тому, что даже краем глаза не мог видеть БД Northwind, т.к. её отдельно надо скачивать и прикреплять к инстансу сервера. А что значит "она достаточно типичная"? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 14:43 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, авторА что значит "она достаточно типичная"? типичное решение типичной задачи. Клиенты, продажи и т.д. Да и вообще я всего лишь хотел донести мысль, что следовать принципам потому что так написано где-то имхо глупо и неправильно. Если модели домена и бизнеса совпадают это сразу неправильно и плохо? Бред. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 15:25 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanЕсли модели домена и бизнеса совпадают это сразу неправильно и плохо? Бред. Что такое "модель бизнеса"? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 15:47 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANA, авторА что значит "она достаточно типичная"? типичное решение типичной задачи. Клиенты, продажи и т.д. Да и вообще я всего лишь хотел донести мысль, что следовать принципам потому что так написано где-то имхо глупо и неправильно. Если модели домена и бизнеса совпадают это сразу неправильно и плохо? Бред.Хм. Клиенты, продажи и т.д. Какой хороший пример :) Значит есть заказы. В заказе есть шапка/заголовок/основная часть и товары/услуги/детализация. В реляционной БД это минимум две сущности/таблицы (в реальности конечно больше, т.к. есть всякие справочные данные типа валюты, единиц измерения и т.п.), в коде доменной модели одна - заказ (агрегирующая). По Вашему тут нужен маппинг или нет? :) P.S.: а я разве предлагал слепо следовать принципам? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 15:53 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAВ реляционной БД это минимум две сущности/таблицы (в реальности конечно больше, т.к. есть всякие справочные данные типа валюты, единиц измерения и т.п.), в коде доменной модели одна - заказ (агрегирующая).Тут имеется ввиду, что данные в БД раскиданы по нескольким таблицам, а инстансе заказа они собраны. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 16:01 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAskyANAВ реляционной БД это минимум две сущности/таблицы (в реальности конечно больше, т.к. есть всякие справочные данные типа валюты, единиц измерения и т.п.), в коде доменной модели одна - заказ (агрегирующая).Тут имеется ввиду, что данные в БД раскиданы по нескольким таблицам, а инстансе заказа они собраны. а там в EF будет все что нужно в связанной коллекции :). Но если даже предположить что надо получить имя какого-то справочника для заказа, то какой-то код приложения дернет 2 репозитория (например) и заполнит некий объект. Но помойму это не маппинг, а уже совсем логика /контроллер/ хуеллер. Например пусть это будет в методе WCF сервиса СформироватьЗаказ НОМЕР ХХХ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 17:27 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAпропущено... Тут имеется ввиду, что данные в БД раскиданы по нескольким таблицам, а инстансе заказа они собраны. а там в EF будет все что нужно в связанной коллекции :). Но если даже предположить что надо получить имя какого-то справочника для заказа, то какой-то код приложения дернет 2 репозитория (например) и заполнит некий объект. Но помойму это не маппинг, а уже совсем логика /контроллер/ хуеллер. Например пусть это будет в методе WCF сервиса СформироватьЗаказ НОМЕР ХХХВы смешали всё в кучу и пишете глупости. Давайте разбираться: 1. 2 репозитория тут не нужно. Заказ является корнем агрегации (почитайте на досуге про этот термин) и достаточно одного репозитория, что возвращает заказы; 2. Репозиторий не отвечает за маппинг, репозиторий дёргает EF; 3. EF - это ORM, что расшифровывается как object-relational mapping. То есть если Вы используете EF напрямую, без прослойки в виде репозитория, или внутри реализации репозитория, то маппинг выполняется. Если Вы не используете EF, или какой другой ORM, то придётся писать маппинг самостоятельно. И от того, что Вы его ручками напишите, он не станет логикой/контроллером/хелпером. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 17:48 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, вот видите, вы говорите "глупости", а я вам говорю что это не глупости. Давайте разбираться далее. Под репозиторием я подразумеваю http://blogs.msdn.com/b/wriju/archive/2013/08/23/using-repository-pattern-in-entity-framework.aspx вот- что-то такое. И вполне может быть что при формировании "заказа" может потребоваться обращаться к нескольким таким репозиториям. В конце концов представим что у нас не EF c готовыми маппингами связанных сущностей а самописный слой. В чем глупость? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 17:53 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, не спешите. Я Вам задал прямой вопрос: "По Вашему тут нужен маппинг или нет?". Давайте сначала на него ответим, а потом уже будем разбираться с количеством репозиториев :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 17:57 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Хотя нет. Давайте сразу на Ваш вопрос ответим:netivanВозьмем известный пример бд Northwind. Что там маппить будете? Маппить (отображать) будем данные из нескольких таблиц БД на одну доменную сущность - заказ. Согласны? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:02 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAХотя нет. Давайте сразу на Ваш вопрос ответим:netivanВозьмем известный пример бд Northwind. Что там маппить будете? Маппить (отображать) будем данные из нескольких таблиц БД на одну доменную сущность - заказ. Согласны? я вам косвенно ответил уже. авторЗначит есть заказы. В заказе есть шапка/заголовок/основная часть и товары/услуги/детализация. Имеем заказ как бизнес-сущность, совсем не связанную с БД, так? Чтобы "собрать" заказ я буду обращаться к разным сущностям Бд через репозиторий EF (например). И вся логика работы с заказом будет в отдельном классе/сервисе/контроллере. Только я бы это маппингом не стал называть ибо вывести Заголовок как вы сказали в виде больших букв,например, задача совсем не репозитория с маппингами :) Если вы намекаете, что тем самым я буду дублировать код например в сервисе и веб-приложении, то да, такое может быть и тогда этот бизнес-объект с логикой будет в отдельном месте, а уже результат его работы будут использоваться все по своему. ЗЫ наверное пример с большими буквами неудачный, тут сразу закидаете что это "представление". Пусть будет лучше какая-то сложная формула для суммы заказа. ЗЫ фух, слишком для вечера пятницы! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:33 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, Вы скачете с пятого на десятое и путаетесь. Ещё раз сначала: 1. в БД две таблицы: Orders (шапка/заголовок/основная часть заказа) и OrderDetails (товары/услуги/детализация по заказу); 2. с точки зрения доменной модели одна сущность: Order (заказ). Вам нужно представить данные, что лежат в БД в виде сущности доменной модели (экземпляра класса Order), согласны? Это называется object-relational mapping. Отображение реляционнных данных на объект области определения. Бизнес логика работы с заказом нам тут пока на фиг не нужна, код этой логики отрабатывал, когда заказ оформляли (генерировался номер заказа, учитывались всякие скидки/наценки). Ни про какие выводы Заголовка куда-то там в представление я не писал, и уж тем более не называл это маппингом. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:52 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanЗЫ наверное пример с большими буквами неудачный, тут сразу закидаете что это "представление". Пусть будет лучше какая-то сложная формула для суммы заказа.Сложные формулы не нужны, так как уже применены, заказ оформлен, данные уже в БД. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:55 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanЗЫ фух, слишком для вечера пятницы!Оно и видно ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:55 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivan, Вы скачете с пятого на десятое и путаетесь. Ещё раз сначала: 1. в БД две таблицы: Orders (шапка/заголовок/основная часть заказа) и OrderDetails (товары/услуги/детализация по заказу); 2. с точки зрения доменной модели одна сущность: Order (заказ). Вам нужно представить данные, что лежат в БД в виде сущности доменной модели (экземпляра класса Order), согласны? Это называется object-relational mapping. Отображение реляционнных данных на объект области определения. Бизнес логика работы с заказом нам тут пока на фиг не нужна, код этой логики отрабатывал, когда заказ оформляли (генерировался номер заказа, учитывались всякие скидки/наценки). Ни про какие выводы Заголовка куда-то там в представление я не писал, и уж тем более не называл это маппингом. да, я напутал. У меня это будет так OrderRepository<Order>, где Order это класс EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:57 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAnetivan, Вы скачете с пятого на десятое и путаетесь. Ещё раз сначала: 1. в БД две таблицы: Orders (шапка/заголовок/основная часть заказа) и OrderDetails (товары/услуги/детализация по заказу); 2. с точки зрения доменной модели одна сущность: Order (заказ). Вам нужно представить данные, что лежат в БД в виде сущности доменной модели (экземпляра класса Order), согласны? Это называется object-relational mapping. Отображение реляционнных данных на объект области определения. Бизнес логика работы с заказом нам тут пока на фиг не нужна, код этой логики отрабатывал, когда заказ оформляли (генерировался номер заказа, учитывались всякие скидки/наценки). Ни про какие выводы Заголовка куда-то там в представление я не писал, и уж тем более не называл это маппингом. да, я напутал. У меня это будет так OrderRepository<Order>, где Order это класс EF.Замечательно! Мы развеяли Ваши заблуждения о бестолковом маппинге:netivanЗачем для этого бестоклу мапить объекты? И получили ровно один репозиторий. Ура! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 19:03 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, не Ура, их несколько. Вот разгребу напишу код).Хотя возможно мы говорим об одном и том же. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2014, 12:39 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, для одного корня агрегации (aggregation root) достаточно одного репозитория. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2014, 13:53 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Я тоже. :-)Потому как нет никакого наезда. :)Мне наверное показалось . Собственно, с чего и был начат этот топик. skyANAПосмотрев остальной код проекта, прихожу к выводу, что DRY (don’t repeat yourself) у Вас и не пахнет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 11:27 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, мы немного по-разному понимаю данный термин. Хорошо, в конкретном примере "Заказ" будет единственным нужным репозиторием. Вообщем вроде бы мы пришли в завершению темы. Может кто еще выскажется) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 11:38 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Потому как нет никакого наезда. :)Мне наверное показалось . Собственно, с чего и был начат этот топик. skyANAПосмотрев остальной код проекта, прихожу к выводу, что DRY (don’t repeat yourself) у Вас и не пахнет.Показалось. И мы начали обсуждать этот момент в начале топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 21:08 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanмы немного по-разному понимаю данный термин. Хорошо, в конкретном примере "Заказ" будет единственным нужным репозиторием. Вообщем вроде бы мы пришли в завершению темы. Может кто еще выскажется)А как Вы его понимаете? Мне кажется, что Вы уходите немного в сторону. Думаете к примеру о том, что где-то понадобится редактировать справочники, для этого понадобится ещё репозитории. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 21:11 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivanмы немного по-разному понимаю данный термин. Хорошо, в конкретном примере "Заказ" будет единственным нужным репозиторием. Вообщем вроде бы мы пришли в завершению темы. Может кто еще выскажется)А как Вы его понимаете? Мне кажется, что Вы уходите немного в сторону. Думаете к примеру о том, что где-то понадобится редактировать справочники, для этого понадобится ещё репозитории. Так? справочники отличный пример. Но вопрос я ваш не понял. Давайте так мой подход. на примере EF: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
вот как бы такой подход. Давайте критиковать его. МОжно на конкретном примере. Например, для Справочников п.3 не нужен вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 21:51 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, п. 3 - это у Вас уровень бизнес-логики, так? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 22:29 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivan, п. 3 - это у Вас уровень бизнес-логики, так? да. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 22:50 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAnetivan, п. 3 - это у Вас уровень бизнес-логики, так? да.Иначе говоря уровень области определения. Пока всё по феншуй ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 22:57 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivanпропущено... да.Иначе говоря уровень области определения. Пока всё по феншуй тогда о чем спор? Наверное моя мысль была в том, что п.3 далеко не всегда нужен. Возможно благодаря EF, где все же много можно сделать в репозитории п.2. =) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 23:06 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAпропущено... Иначе говоря уровень области определения. Пока всё по феншуй тогда о чем спор? Наверное моя мысль была в том, что п.3 далеко не всегда нужен. Возможно благодаря EF, где все же много можно сделать в репозитории п.2. =)А спора нет. Вы просто забежали вперёд: перешли от контекста репозитория к бизнес-логике. Последнюю не надо пихать в репозиторий, это не его ответсвенность. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 23:14 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivanпропущено... тогда о чем спор? Наверное моя мысль была в том, что п.3 далеко не всегда нужен. Возможно благодаря EF, где все же много можно сделать в репозитории п.2. =)А спора нет. Вы просто забежали вперёд: перешли от контекста репозитория к бизнес-логике. Последнюю не надо пихать в репозиторий, это не его ответсвенность. ну я об этом раз сто твердил. Неужели мы сошлись на едином мнении?:) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 23:46 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAпропущено... А спора нет. Вы просто забежали вперёд: перешли от контекста репозитория к бизнес-логике. Последнюю не надо пихать в репозиторий, это не его ответсвенность. ну я об этом раз сто твердил. Неужели мы сошлись на едином мнении?:)О чём об этом? О споре? Логике? О её месте? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 08:22 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1403421]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
146ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 250ms |
0 / 0 |