powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / О применении SOLID
25 сообщений из 159, страница 4 из 7
О применении SOLID
    #38515585
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANASeVaВряд ли у вас получиться что-либо доказать силой мысли. Нужны конкретные примеры. Упражнения в красноречии и разговоры о сферических конях не интересны.Примеры чего Вам нужны? Что Ваше решение менее гибкое, чем с пресловутым репозиторием?
Дак Вы сами признали, что проект жёстко увязан c EF. Тесты без БД не запустишь, с Memcached не поиграешься.

А доказывать я ничего и не собирался. Но если хотите, то можем доказать, что SRP Вы не соблюдаете.

Кака единственная ответственность лежит на классе SvcPersonal? Только не говорите: содержать логику.
...
Рейтинг: 0 / 0
О применении SOLID
    #38515819
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaАлексей, я в эти игры играю давно , уже сделан не один проект и знаю о чем говорю.Игроман? :-)

Некогда мне тут в диконтейнеры играть. Мне важен результат а не процесс. Как только от диконтейнера в моих проектах будет польза, он обязательно будет использован. А пока в нём смысла нет.
...
Рейтинг: 0 / 0
О применении SOLID
    #38515825
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
пропущено...
Вряд ли у вас получиться что-либо доказать силой мысли. Нужны конкретные примеры. Упражнения в красноречии и разговоры о сферических конях не интересны.Примеры чего Вам нужны? Что Ваше решение менее гибкое, чем с пресловутым репозиторием?Аналогичный код, написанный "правильно". Ваша инкапсуляция откровенно говоря не впечатлила.
skyANAДак Вы сами признали, что проект жёстко увязан c EF.Да.
skyANAТесты без БД не запустишь, с Memcached не поиграешься. И не надо. Мне проще подготовить БД с тестовыми данными.
skyANAА доказывать я ничего и не собирался. Но если хотите, то можем доказать, что SRP Вы не соблюдаете.

Кака единственная ответственность лежит на классе SvcPersonal? Только не говорите: содержать логику.
skyANAНу и если говорить о SOLID, то явное нарушение принципа Single responsibility: класс и репозиторий, и маппер, и сервис.Ну давайте попробуем:

Репозитарий - Да.
Маппер - Нет, маппинг DbDataReader -> Object производит EF.
Сервис - этим занимается WCF, на прикладном коде это практически никак не отражается.
...
Рейтинг: 0 / 0
О применении SOLID
    #38515902
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaАлексей, я в эти игры играю давно , уже сделан не один проект и знаю о чем говорю.Игроман? :-)

Некогда мне тут в диконтейнеры играть. Мне важен результат а не процесс. Как только от диконтейнера в моих проектах будет польза, он обязательно будет использован. А пока в нём смысла нет.

Ну, в игрушки собственного производства это ты до сих пор играешь. Чужие осилить еще не можешь.
...
Рейтинг: 0 / 0
О применении SOLID
    #38515933
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЧужие осилить еще не можешь.Почему ты так решил?
...
Рейтинг: 0 / 0
О применении SOLID
    #38515953
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Примеры чего Вам нужны? Что Ваше решение менее гибкое, чем с пресловутым репозиторием?Аналогичный код, написанный "правильно". Ваша инкапсуляция откровенно говоря не впечатлила.
skyANAДак Вы сами признали, что проект жёстко увязан c EF.Да.
skyANAТесты без БД не запустишь, с Memcached не поиграешься. И не надо. Мне проще подготовить БД с тестовыми данными.
skyANAА доказывать я ничего и не собирался. Но если хотите, то можем доказать, что SRP Вы не соблюдаете.

Кака единственная ответственность лежит на классе SvcPersonal? Только не говорите: содержать логику.
skyANAНу и если говорить о SOLID, то явное нарушение принципа Single responsibility: класс и репозиторий, и маппер, и сервис.Ну давайте попробуем:

Репозитарий - Да.
Маппер - Нет, маппинг DbDataReader -> Object производит EF.
Сервис - этим занимается WCF, на прикладном коде это практически никак не отражается.
На базе объектов EF легко сделать репозиторий этот пресловутый. Почему вы не сделали?))
...
Рейтинг: 0 / 0
О применении SOLID
    #38515956
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanНа базе объектов EF легко сделать репозиторий этот пресловутый. Почему вы не сделали?))Говорят, не умею. :-)
...
Рейтинг: 0 / 0
О применении SOLID
    #38516158
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К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.
...
Рейтинг: 0 / 0
О применении SOLID
    #38516159
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КnetivanНа базе объектов EF легко сделать репозиторий этот пресловутый. Почему вы не сделали?))Говорят, не умею. :-)Пока у Вас нет полноценного репозитория, что отдаёт чистые доменные объекты, не завязанные на EF и System.Runtime.Serialization.
...
Рейтинг: 0 / 0
О применении SOLID
    #38516180
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей КИ не надо. Мне проще подготовить БД с тестовыми данными.А готовите? Пишите тесты? Что-то я их рядом с проектом не заметил.Потому что этот проект не содержит логики, достойной организации для неё полноценного тестирования. Для системных библиотек у меня есть тесты, но я их не стал выкладывать. Не думаю, что они будут кому-то интересны.
skyANAПомимо основной функции репозитория я вижу ещё и некоторую логику, типа "упс, такому входному параметру соответствует более одного элемента, ловите исключение". Плюс валидация данных.
Что также нарушает принцип того, что повод для изменения должен быть только один. Валидацию я бы выделил в отдельный компонент - PersonalValidator.Получится класс с одним маленьким методом. Недостаточная ответственность класса Вас не пугает?
skyANAАлексей КМаппер - Нет, маппинг DbDataReader -> Object производит EF.А я не про data mapping, а про personal -> PersonalView.

Алексей КСервис - этим занимается WCF, на прикладном коде это практически никак не отражается.Предложат Вам с новом году: Алексей, а давай заменим WCF сервис на RESTful на базе WebAPI, - и придётся Вам код копипастить в ApiController.Копипастить не придётся. По факту будет произведено выделение класса. Дадим ему тогда гордое имя PersonalRepository.
...
Рейтинг: 0 / 0
О применении SOLID
    #38516370
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей КСервис - этим занимается WCF, на прикладном коде это практически никак не отражается.Предложат Вам с новом году: Алексей, а давай заменим WCF сервис на RESTful на базе WebAPI, - и придётся Вам код копипастить в ApiController.Но это фантастика. Вероятнее будет предложено добавить доступ через HTTP, как это нынче принято в интеграциях. На что будет добавлен ещё один WCF ServiceHost, как я уже писал ранее. Прикладной код это вообще никак не коснётся.
...
Рейтинг: 0 / 0
О применении SOLID
    #38516398
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей КМаппер - Нет, маппинг DbDataReader -> Object производит EF.А я не про data mapping, а про personal -> PersonalView.Это не мапинг, это прикладная логика.
...
Рейтинг: 0 / 0
О применении SOLID
    #38516477
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей, забудь про солид в своих гавноклассах, кури вот это :) http://codearticles.ru/articles/2407
...
Рейтинг: 0 / 0
О применении SOLID
    #38521288
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей, забудь про солид в своих гавноклассах, кури вот это :) http://codearticles.ru/articles/2407 В кодогенераторе EF-контекста есть репозитарий . Так что можно расслабиться и успокоиться. :-)
...
Рейтинг: 0 / 0
О применении SOLID
    #38521298
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУАлексей, забудь про солид в своих гавноклассах, кури вот это :) http://codearticles.ru/articles/2407 В кодогенераторе EF-контекста есть репозитарий . Так что можно расслабиться и успокоиться. :-)

Красота :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
isnull((
                        select top 1
                            major_id 
                        from sys.extended_properties ep
                        where 
                            ep.major_id = o.object_id and
                            ep.minor_id = 0 and
                            ep.class = 1 and
                            ep.name = N'microsoft_database_tools_support'
                    ), 0) = 0



http://msdn.microsoft.com/ru-ru/library/ms188336.aspx
...
Рейтинг: 0 / 0
О применении SOLID
    #38521309
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
В кодогенераторе EF-контекста есть репозитарий . Так что можно расслабиться и успокоиться. :-)

Красота :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
isnull((
                        select top 1
                            major_id 
                        from sys.extended_properties ep
                        where 
                            ep.major_id = o.object_id and
                            ep.minor_id = 0 and
                            ep.class = 1 and
                            ep.name = N'microsoft_database_tools_support'
                    ), 0) = 0



http://msdn.microsoft.com/ru-ru/library/ms188336.aspx Там exists не катит. Там надо учитывать в том числе значение поля major_id существующей записи.
...
Рейтинг: 0 / 0
О применении SOLID
    #38521322
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТам exists не катит. Там надо учитывать в том числе значение поля major_id существующей записи.
Ну так добавить в where условие major_id is null и обернуть это дело в exists ))
...
Рейтинг: 0 / 0
О применении SOLID
    #38521332
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КТам exists не катит. Там надо учитывать в том числе значение поля major_id существующей записи.
Ну так добавить в where условие major_id is null и обернуть это дело в exists ))Зачем? И так всё прекрасно работает.
...
Рейтинг: 0 / 0
О применении SOLID
    #38521435
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Говорят, не умею. :-)Пока у Вас нет полноценного репозитория, что отдаёт чистые доменные объекты, не завязанные на EF и System.Runtime.Serialization.
да спорный это момент конечно. Ну реально репозиторий на объектах EF будет хватать в большинстве случаев. Чтобы не делать потом сто раз маппинги.
...
Рейтинг: 0 / 0
О применении SOLID
    #38521466
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanskyANAпропущено...
Пока у Вас нет полноценного репозитория, что отдаёт чистые доменные объекты, не завязанные на EF и System.Runtime.Serialization.
да спорный это момент конечно. Ну реально репозиторий на объектах EF будет хватать в большинстве случаев. Чтобы не делать потом сто раз маппинги.Data Mapping - это не ответсвенность репозитория. Подозреваю, что в большинстве Ваших случаев репозиторий вообще не нужен.
...
Рейтинг: 0 / 0
О применении SOLID
    #38521500
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAData Mapping - это не ответсвенность репозитория.Особенно Mapping DbDataReader => Object.
skyANAПодозреваю, что в большинстве Ваших случаев репозиторий вообще не нужен.Звучит осуждающе.
...
Рейтинг: 0 / 0
О применении SOLID
    #38521512
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПока у Вас нет полноценного репозитория, что отдаёт чистые доменные объекты, не завязанные на EF и System.Runtime.Serialization.EF DbContext API рассчитан на то, чтобы бизнес-объекты ничего не знали про EF. Особенно если использовать Fluent API.

WCF требует от классов только атрибуты. Тут зависимости тоже особо никакой.
...
Рейтинг: 0 / 0
О применении SOLID
    #38521521
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAData Mapping - это не ответсвенность репозитория.Особенно Mapping DbDataReader => Object.
Он про маппинг доменных объектов. Маппингом репозиторий не занимается. Маппить может контроллер или иная промежуточная абстраккция. Например, есть доменный объект и модель представления. Кто должен смапить их как в одну, так и в другую сторону? Правильно, кто угодно, но только не репозиторий.
...
Рейтинг: 0 / 0
О применении SOLID
    #38521528
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО пока данные лежат в одном месте и нет необходимости в нескольких вариантах доступа к ним, то сложно понять суть репозитория, в особенности следующей фразы из описания шаблона: "код распределения данных, скрытый в объекте Repository, позаботится о соответсвующих операциях незаметно для разработчика".

Например у нас в проекте имеется следующий интерфейс:
Код: c#
1.
public interface IRepository<T> where T : IEntity


И несколько вариантов реализации:
Код: c#
1.
public class SqlServerRepository<T> : IRepository<T> where T : IEntity


Код: c#
1.
public class MongoDbRepository<T> : IRepository<T> where T : IEntity


Код: c#
1.
public class CacheRepository<T> : IRepository<T> where T : IEntity


Код: c#
1.
internal class LockSafeRepository<T> : IRepository<T> where T : IEntity


Почему так?
Потому что у нас основное хранилище - это Sql Server.
Часть данных/сущностей/Entity хранится в MongoDB.
Часть данных/сущностей/Entity необходимо кэшировать.
Часть данных/сущностей/Entity, что хранится в MongoDB участвует в транзакциях, а монго их не поддерживает. Необходима своя реализация.

Причём кэш и поддержка транзакционности не нужна в ряде случаев: миграция, клонирование, перенос данных между базами и нодами, нагрузочное тестирование,. Попросту говоря тут необходимо включить, тут отключить незаметно для вызывающего кода.

Вот такие пироги. Говорите репозитория на объектах EF хватит?
...
Рейтинг: 0 / 0
О применении SOLID
    #38521539
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Особенно Mapping DbDataReader => Object.
Он про маппинг доменных объектов.Сори, у меня телепатор в ремонте. :-)
МСУМаппингом репозиторий не занимается. Маппить может контроллер или иная промежуточная абстраккция. Например, есть доменный объект и модель представления. Кто должен смапить их как в одну, так и в другую сторону? Правильно, кто угодно, но только не репозиторий.Маппинг сам по себе - зло. Не надо описывать одинаковые структуры данных в разных классах и никакие маппинги не потребуются.

Единственное место где нужен специальный DTO - это при написании вебсервиса для интеграции с внешней системой. Там важно гарантировать постоянный контракт.
...
Рейтинг: 0 / 0
25 сообщений из 159, страница 4 из 7
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / О применении SOLID
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]