powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Code First + SQL Triggers
25 сообщений из 83, страница 3 из 4
Code First + SQL Triggers
    #39652272
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и конечно всё должно быть Async
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652294
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaДругими словами, это BLL должен быть реализован отдельно от БД через какой-то уровень абстракции, например через паттерн Repository. Так?

Да, всё верно.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652297
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНу и конечно всё должно быть Async

ja, ja, das ist fantastisch!
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652330
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

Склонен несогласиться с вами, потому что с такой реализацией успешно справляется сам DbContext, он это реализуте "из коробки". При таком раскладе Ваш Repository лишнее промежуточное звено. Поэтому, я предпочитаю кое-что добавлять в реализацию репозитория, чтобы было более полезно. Например, Mapping или Pagination. Даже сделал пару пакетов Calabonga.EntityFramework и Calabonga.EntityFrameworkCore более того, описал это в другой статье .


С другой стороны, сколько людей, столько и мнений. Весьма признателен вам, что уделили своё драгоценное внимание. Спасибо.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652332
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,


авторЯ бы Вам посоветовал почитать про Domain Driven Design. Думаю, что Вам будет интересно.

https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577


Спасибо, я обязательно почитаю. Может чего нового найду. :)
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652345
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Post : EntityBase
{
    public string Author { get; set; }

    public string Title { get; set; }

    public string Content { get; set; }

    public string[] Tags { get; set; }

    public DateTime CreatedAtUtc { get; set; }

    public List<Comment> Comments { get; set; }
}


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
public class Repository<T> : IRepository<T> where T : EntityBase
{
    private readonly ApplicationDbContext dbContext;

    public Repository(ApplicationDbContext dbContext)
    {
        this.dbContext = dbContext;
    }

    public virtual T GetById(int id)
    {
        return dbContext.Set<T>().Find(id);
    }

    public virtual IEnumerable<T> List()
    {
        return dbContext.Set<T>().AsEnumerable();
    }

    public virtual IEnumerable<T> List(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
    {
        return dbContext.Set<T>().Where(predicate).AsEnumerable();
    }

    public void Insert(T entity)
    {
        dbContext.Set<T>().Add(entity);
        dbContext.SaveChanges();
    }

    public void Update(T entity)
    {
        dbContext.Entry(entity).State = EntityState.Modified;
        dbContext.SaveChanges();
    }

    public void Delete(T entity)
    {
        dbContext.Set<T>().Remove(entity);
        dbContext.SaveChanges();
    }
}




Это нормальный репозиторий.
Суть в том что можно переписать для другого ApplicationDbContext.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652356
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaskyANA,

Склонен несогласиться с вами, потому что с такой реализацией успешно справляется сам DbContext, он это реализуте "из коробки". При таком раскладе Ваш Repository лишнее промежуточное звено. Поэтому, я предпочитаю кое-что добавлять в реализацию репозитория, чтобы было более полезно. Например, Mapping или Pagination. Даже сделал пару пакетов Calabonga.EntityFramework и Calabonga.EntityFrameworkCore более того, описал это в другой статье .


С другой стороны, сколько людей, столько и мнений. Весьма признателен вам, что уделили своё драгоценное внимание. Спасибо.
Суть репозитория в том, что он скрывает за собой хранилище.
То есть это может быть и SQL Server, и MongoDB, и Couchbase, и сторонний сервис, и вообще несколько хранилишь последовательно, или параллельно.

У Вас же это выходит не репозиторий, а обёртка над EF.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652359
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Calabongaон это реализуте "из коробки".+1

CalabongaПоэтому, я предпочитаю кое-что добавлять в реализацию репозитория, чтобы было более полезно. Например, Mapping или Paginationну дак и это есть в NuGet маленькой добавочкой.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652360
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosЭто нормальный репозиторий.
Суть в том что можно переписать для другого ApplicationDbContext.ты с EF не работал, поэтому все переписываешь.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652361
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANACalabongaskyANA,

Склонен несогласиться с вами, потому что с такой реализацией успешно справляется сам DbContext, он это реализуте "из коробки". При таком раскладе Ваш Repository лишнее промежуточное звено. Поэтому, я предпочитаю кое-что добавлять в реализацию репозитория, чтобы было более полезно. Например, Mapping или Pagination. Даже сделал пару пакетов Calabonga.EntityFramework и Calabonga.EntityFrameworkCore более того, описал это в другой статье .


С другой стороны, сколько людей, столько и мнений. Весьма признателен вам, что уделили своё драгоценное внимание. Спасибо.
Суть репозитория в том, что он скрывает за собой хранилище.
То есть это может быть и SQL Server, и MongoDB, и Couchbase, и сторонний сервис, и вообще несколько хранилишь последовательно, или параллельно.

У Вас же это выходит не репозиторий, а обёртка над EF.
ну и что?
как только надо будет обернуть что то другое он напишет другую реализацию
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652368
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ViPRosЭто нормальный репозиторий.
Суть в том что можно переписать для другого ApplicationDbContext.ты с EF не работал, поэтому все переписываешь.
когда ж ты научишься? такое впечатление, что какой-то небольшой барьер не можешь преодолеть
как только перескочишь сразу левел будет другой
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652372
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Calabonga,

и мой пример был про то, что TagRepository и Provider не имеют смысла.
Вполне можно ограничиться PostRepository : Repository<Post> , либо вообще DbContext, но тогда возникает жёсткая зависимость от EF.

Post - это корень агрегации, сущность (Entity).
И при её сохранении EF отобразит её на все нужные таблицы, на то EF и ORM
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652375
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Ты helloWorld сайт написал?
А че за советы?
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652376
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANAпропущено...

Суть репозитория в том, что он скрывает за собой хранилище.
То есть это может быть и SQL Server, и MongoDB, и Couchbase, и сторонний сервис, и вообще несколько хранилишь последовательно, или параллельно.

У Вас же это выходит не репозиторий, а обёртка над EF.
ну и что?
как только надо будет обернуть что то другое он напишет другую реализацию
Он написал: "При таком раскладе Ваш Repository лишнее промежуточное звено".

Позволь спросить, если он выкинет это звено, то другую реализацию чего он напишет, DbContext что-ли?
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652378
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Мне показалось, что ты сказал что это пример "неправильного" репозитория.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652390
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСуть репозитория в том, что он скрывает за собой хранилище.

Я бы сказал больше, он скрывает за собой хранилище, и особенности хранения данных в данном хранилище, которые скрываются слоем доступа к данным.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652399
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot skyANA]CalabongaskyANA,

Суть репозитория в том, что он скрывает за собой хранилище.
То есть это может быть и SQL Server, и MongoDB, и Couchbase, и сторонний сервис, и вообще несколько хранилишь последовательно, или параллельно.

У Вас же это выходит не репозиторий, а обёртка над EF.

Репозиторий - как абстракция на доступ к БД (DAL). Его задача отвязаться от конкретной БД. То есть вашему репозиторию должно быть абсолютно фиалетово, к какой базе данных цепляться (MS SQL, PostgreSQL, SqlLite, Oracle, InMemory, etc). Таким образом, EntityFramework делает тоже самое только на основании набора Provider'ов. Именно поэтому я и говорю, что ваша реализация просто дублирует функционал, который уже делает EntityFramework. И я считаю, что в этом очень мало смысла. Поэтому я в свой репозиторий привнес немного больше обязанностей, как то: Mapping, Pagination and Secutiry (в частности, Row Level Security).

И, собственно говоря, можно сказать, что моя реализация - это "Надстройка на EntityFramework" ибо просто Repository уже в EntityFramework реализован.

P.S.: Кстати сказать, при использовании DI-контейнера паттерн Unit Of Work тоже не имеет смысла в силу того, что контейнер реализует его функционал на 100%. Но вы можете привнести своё видение в этот паттерн, и у вас будет своя обёртка. :)
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652403
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAСуть репозитория в том, что он скрывает за собой хранилище.

Я бы сказал больше, он скрывает за собой хранилище, и особенности хранения данных в данном хранилище, которые скрываются слоем доступа к данным.
Скорее такого шаблона просто нет, это частный случай враппера.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652407
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А общее правило вырисовывается в виде "оборачивай все то, что не твое или твое, но может измениться".
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652408
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosСкорее такого шаблона просто нет, это частный случай враппера.

Вовсе нет. Просто когда от репозитория хотят: фильтрацию, пейджинг, поиск, ковыряние в данных... тогда абстракция начинает плыть и рождаются уродливые год обжекст. Нужны либо спецификации, либо квери обжект, тогда всё будет путём. Не нужно из репозитория возвращать IQueryable.
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652409
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosА общее правило вырисовывается в виде "оборачивай все то, что не твое или твое, но может измениться".

Нет, это как сказать, глядя на работу хирурка, режь, режь всё что попадётся под руку
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652411
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

возвращать в общем случае надо либо явно свое, либо системное
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652417
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

зато ни один гад не сможет сказать что писал не по паттернам :)
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652418
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IQuerable можно возвращать - это часть NET
...
Рейтинг: 0 / 0
Code First + SQL Triggers
    #39652429
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaПоэтому я в свой репозиторий привнес немного больше обязанностей, как то: Mapping, Pagination and Secutiry (в частности, Row Level Security).
А где он? Твой? Документация? Примеры?
Мы то про триггер, то про ОРМ то про паттерн.
...
Рейтинг: 0 / 0
25 сообщений из 83, страница 3 из 4
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Code First + SQL Triggers
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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