Создание 3-х уровневой архитектуры в DotNet Core 2.2 Web API C # - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю над Web API Core 2.2 и мне необходимо разработать трехуровневую архитектуру. Как я могу это сделать.

Моя структура проекта, как показано ниже

enter image description here

В проекте веб-API ..

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<HrmsDbContext>(opt =>
              opt.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}

В DAL (Библиотечный проект я создал DBContext и предоставил строку подключения, как показано ниже.

enter image description here

Что лучше, чтобы я не предоставил строку подключения в двух местах? и написать 3-х уровневую архитектуру.

Любая помощь будет оценена.

1 Ответ

3 голосов
/ 08 апреля 2019

Слой против уровня

Ваш вопрос касается слоев, а не уровней.

Уровни. Уровень - это просто физическое разделение компонентов вашего приложения.

Слои. Слои действуют как более логические разделители, которые существуют для разделения и организации вашего реального кода.Вы часто будете слышать такие термины, как «Уровень бизнес-логики», «Уровень представления» и другие.Это просто способы упорядочить весь код внутри вашего приложения.

Если у вас есть веб-приложение, содержащее ваш доступ к данным и бизнес-логику, которое работает на одном компьютере / сервере, то у вас будет 3-многоуровневое приложение в 1-уровневом.

Теперь, если ваш доступ к данным размещен на другом компьютере / сервере, а ваш бизнес также размещен на другом компьютере / сервере, то теперь у вас будет трехуровневое приложение в 3-Tier.

Установить строку подключения

Вы указали строку подключения при запуске и добавили ее в службы.Вам не нужно снова определять строку подключения и использовать контекст db, используя Built-DI.Код может выглядеть следующим образом!

Класс запуска

public static IServiceCollection AddCustomDbContext(this IServiceCollection services, IConfiguration configuration)
{

    // Add DbContext using SQL Server Provider
    services.AddDbContext<PaymentDbContext>(options =>
        options.UseSqlServer(configuration.GetConnectionString("myconnectionstring"), x => x.MigrationsAssembly("Payment.Persistence")));

    return services;
}

Класс контекста

public class PaymentDbContext : DbContext
    {
        public PaymentDbContext(DbContextOptions<PaymentDbContext> options)
            : base(options)
        {

        }

        public DbSet<Payments> Payments { get; set; }    


    }    

Используйте DI для доступа к контексту

 private readonly PaymentDbContext _context;


 public PaymentsRepository(PaymentDbContext dbContext)
 {
 _context = dbContext;
}
...