@User99

Правильно ли я пишу на asp.net Core?

Добрый день, подскажите пожалуйста, правильно ли я делаю.
В основном, при обращении к БД использую репозитории. Например,
Создаю модель

public class Photos:BaseEntity
{
public int id {get;set;}
public string file {get;set;}
....
}


создаю репозитоии

public interface IRPhotos<T> where T:BaseEntity
    {
        Task New(T photo);
        Task Delete(int id);
        Task<Photos> Avatar(string iin);
        Task<IList<Photos>> ShowAll(string iin);
    }

Тек же создаю для каждого интерфейса свой файл
private string connectionString;

        public ReposPhotos(IConfiguration configuration)
        {
            connectionString = configuration.GetValue<string>("DBInfo:ConnectionString");
        }

        internal IDbConnection Connection
        {
            get
            {
                return new NpgsqlConnection(connectionString);
            }
        }
public async Task<Photos> Avatar(string iin)
        {
            using (IDbConnection dbConnection = Connection)
            {
                dbConnection.Open();
                return (await dbConnection.QueryAsync<Photos>("SELECT * FROM social.photos WHERE iin=@iin AND avatar=true",new { iin=iin})).FirstOrDefault();
            }
        }



Бывает случай когда прям в контроллере обращаюсь к БД, например
public async Task<IActionResult> TPricing()
        {
            using (IDbConnection dbConnection = Connection)
            {
                dbConnection.Open();
                return View(await dbConnection.QueryAsync<TPricing>("SELECT DISTINCT(iin) FROM uchast.t_pricing"));
            }
        }


в связи с этим у меня вопрос, правильно ли я делаю? Можно ли так использовать? Плюсы и минусы?
связь asp.net core+dapper+postgresql
  • Вопрос задан
  • 136 просмотров
Решения вопроса 2
1) Репозиторий - коллекция, и методы работы с ней как с коллекцией, ничего лишнего.
2) Controller - посредник между View и Model (стиль MVC). В нем не должно быть никакой бизнес логики, а значит и открытия коннекта и выполнения запроса с его текстом. Тут должен быть вызов компетентного исполнителя - сервиса.

Рекоменую посмотреть на - CleanArchitecture https://github.com/jasontaylordev/CleanArchitecture

Посмотрите на готовые сайты:
https://github.com/nopSolutions/nopCommerce
https://github.com/simplcommerce/SimplCommerce
И крутого монстра - https://github.com/dotnet-architecture/eShopOnCont...

Все сразу не запомнится и не зайдет, это долгий путь.

Самый лучший курс от 0 до норм понимания - https://codewithmosh.com/p/become-a-full-stack-net...
Состоит из трех частей, где автор создает готовое приложение вроде мини соц сети с музыкой, вроде.
Можно в целом его посмотреть, и делать как он, не промахнешся.
Ответ написан
Комментировать
@fan92rus
В том и суть репозиториев что все через них проходит, иначе это потенциальная уязвимость для sql иньекции.
И при изменении репозиторя измениться везде где он используеться
Например если будешь кешировать в редисе то все будут кешироваться
Так что так некоректно.
И еще выносить логику из контроллеров стоит в сервисы https://habr.com/ru/post/437002/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Qualiant
Я бы посоветовал использовать класс SqlCommand и параметризировать запрос. Это разом отсекает массу потенциальных уязвимостей, связанных с SQL. Как минимум, инъекций уже можно не бояться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы