Я работаю над проверкой концепции проекта с использованием Blazor WebAssembly. У проекта уже есть интерфейс React, который я надеюсь воспроизвести в Blazor.
У меня есть следующие проекты в моем решении:
- Домен - содержит сущности и не ссылается на какие-либо другие слои
- Приложение - ссылается на домен и содержит DTO, команды / запросы (используя MediatR / Dapper), валидаторы (используя FluidValidation) и интерфейсы для последующих уровней для реализации
- Постоянство - ссылается на приложение и использует EF Core для хранения моделей доменов в базе данных
- API - веб-API, который регистрирует все, используя DI, и выставляет команды / запросы с уровня приложений через контроллеры
- React Front End - использует AJAX для разговора с API
Я хотел бы сослаться на прикладной уровень в проекте Blazor WebAssembly, чтобы я мог повторно использовать правила проверки, существующие в отношении DTO. Может ли кто-нибудь пройти через код в браузере и извлечь конфиденциальную информацию, такую как строки подключения, из команд / запросов?
Например, простой запрос может выглядеть следующим образом и проходить через код позволил бы проверить IDbConnection
:
public class PayCategoryListQueryHandler
: IRequestHandler<PayCategoryListQuery, PayCategoryListQueryVm>
{
private readonly IDbConnection _connection;
public PayCategoryListQueryHandler(IDbConnection connection)
{
_connection = connection;
}
public async Task<PayCategoryListQueryVm> Handle(PayCategoryListQuery query, CancellationToken cancellationToken)
{
{
var viewModel = new PayCategoryListQueryVm();
viewModel.AddRange(
await _connection.QueryAsync<PayCategoryListItemDto>(
"SELECT Id, Description, MakeAttendedTimeZero, IsOffSite, IsVisibleToClient FROM PayCategory ORDER BY Description"));
return viewModel;
}
}
}
Нужно ли извлекать DTO и их проверку из отдельного слоя, который не содержит кода доступа к базе данных, чтобы предотвратить утечку строки подключения?
Разъяснение
Чтобы попытаться прояснить проблему, я хотел бы попытаться объяснить мою ситуацию немного лучше.
В моем текущем приложении используется фронт React конец с Formik и Yup, обеспечивающим проверку. Это означает, что каждый раз, когда вносится изменение в правило валидации, мне нужно отражать его в двух местах - на уровне приложения и в приложении React. Я надеялся, что переход на Blazor уменьшит дублирование, поскольку будет поддерживать только правила проверки на уровне приложений.
Архитектура, которую я сейчас использую, основана на примере приложения NorthwindTraders .
Используя этот пример, CreateCustomerCommand использует CreateCustomerCommandValidator , который будет отвечать на запросы POST через CustomersController . Чтобы использовать это для проверки на стороне клиента в Blazor WebAssembly, мне в настоящее время необходимо сослаться на прикладной уровень.
Учитывая этот сценарий, все команды (не обработчики команд) и валидаторы должны быть перенесен в отдельный проект, на который затем может ссылаться Blazor. Обработчики команд могут оставаться на прикладном уровне, поэтому удаляются все коды доступа к базе данных.