Я проектирую веб -API в .net 8. У меня всегда есть эта внутренняя дискуссия о том, как передавать информацию между уровнями и, наконец, пользователю. < /p>
У моего API есть три простых слои. Контроллер, служба, репозиторий. Когда репозиторий переходит в базу данных, был ли у меня успешный или неудачный вызов, как мне передать это в службу, службу контроллеру и, наконец, пользователю?
// Api
../controller
../service
../ Repository
example.
В этом сценарии я не возвращаю никаких отзывов в мою службу или контроллер, я позволю коду. < /p>
public virtual async Task Add(User user)
{
try{
await context.Add(user);
await context.SaveChangesAsync();
}
catch(Exception ex){
//.. logging error here
}
}
< /code>
Если я сделаю Get, My Repo вернет пользователя из базы данных, в данном случае я могу доставить пользовательские данные к контроллеру через службу. Если пользовательские данные являются нулевыми, я верю соответствующий не найден HTTP -код, если пользовательские данные не являются нулевыми, я вернусь http -код < /p>
public virtual async Task Get(int userId)
{
try{
return await _context.FindAsync(id);;
}
catch(Exception ex){
//.. logging error here
}
}
< /code>
Скажем то же самое с обновлением и удалите. Мой вопрос: это хорошая практика, чтобы иметь объект, чтобы сохранить результаты успехов/неудачи?
Например, что -то вроде этого для всего творога.public class OperationResult where T : class
{
public bool Success { get; internal set; }
public IEnumerable Errors { get; internal set; } = [];
public T? Data { get; internal set; } = default;
public static OperationResult Successful(T? data = null) => new OperationResult
{
Success = true,
Data = data
};
public static OperationResult Failure(IEnumerable errors) => new OperationResult
{
Success = false,
Errors = errors,
};
}
< /code>
С помощью этого объекта я могу установить данные, передавать их через слои, проверить, хорошо ли процесс или нет. Наконец, возвращая правильный ответ пользователю. Сказать, что я могу сделать что -то подобное. < /P>
public virtual async Task Get(int id)
{
try
{
var user = await _context.FindAsync(id);
if (user != null)
return OperationResult.Successful(user);
return OperationResult.Failure( new List { "User not found" });
}
catch (Exception ex) {
//Todo -> log here
}
return OperationResult.Failure( new List { "Error getting the user" });
}
< /code>
и < /p>
public virtual async Task Add(User user)
{
try {
await _contxet.AddAsync(user);
await _context.SaveChangesAsync();
return OperationResult.Successful();
}
catch (Exception ex) {
//Todo -> log here
}
return OperationResult.Failure(new List { "Creating error" });
}
< /code>
Я заметил, что в случае добавления мне не нужно возвращать объект, который я только что вставил. Я понятия не имею, если это хорошо или плохо. Я склонен к плохому. < /P>
Итак, хорошая идея иметь объект такого рода или нет? Или, может быть, есть другие решения, о которых я не знаю. Кроме того, это решение похоже на антипаттерн.
Не могли бы вы помочь мне выяснить, какое лучше>
Подробнее здесь: https://stackoverflow.com/questions/794 ... re-web-api
Лучшая практика для возврата информации между слоями в> чистом интернет -API [закрыто] ⇐ C#
Место общения программистов C#
1738942319
Anonymous
Я проектирую веб -API в .net 8. У меня всегда есть эта внутренняя дискуссия о том, как передавать информацию между уровнями и, наконец, пользователю. < /p>
У моего API есть три простых слои. Контроллер, служба, репозиторий. Когда репозиторий переходит в базу данных, был ли у меня успешный или неудачный вызов, как мне передать это в службу, службу контроллеру и, наконец, пользователю?
// Api
../controller
../service
../ Repository
example.
В этом сценарии я не возвращаю никаких отзывов в мою службу или контроллер, я позволю коду. < /p>
public virtual async Task Add(User user)
{
try{
await context.Add(user);
await context.SaveChangesAsync();
}
catch(Exception ex){
//.. logging error here
}
}
< /code>
Если я сделаю Get, My Repo вернет пользователя из базы данных, в данном случае я могу доставить пользовательские данные к контроллеру через службу. Если пользовательские данные являются нулевыми, я верю соответствующий не найден HTTP -код, если пользовательские данные не являются нулевыми, я вернусь http -код < /p>
public virtual async Task Get(int userId)
{
try{
return await _context.FindAsync(id);;
}
catch(Exception ex){
//.. logging error here
}
}
< /code>
Скажем то же самое с обновлением и удалите. Мой вопрос: это хорошая практика, чтобы иметь объект, чтобы сохранить результаты успехов/неудачи?
Например, что -то вроде этого для всего творога.public class OperationResult where T : class
{
public bool Success { get; internal set; }
public IEnumerable Errors { get; internal set; } = [];
public T? Data { get; internal set; } = default;
public static OperationResult Successful(T? data = null) => new OperationResult
{
Success = true,
Data = data
};
public static OperationResult Failure(IEnumerable errors) => new OperationResult
{
Success = false,
Errors = errors,
};
}
< /code>
С помощью этого объекта я могу установить данные, передавать их через слои, проверить, хорошо ли процесс или нет. Наконец, возвращая правильный ответ пользователю. Сказать, что я могу сделать что -то подобное. < /P>
public virtual async Task Get(int id)
{
try
{
var user = await _context.FindAsync(id);
if (user != null)
return OperationResult.Successful(user);
return OperationResult.Failure( new List { "User not found" });
}
catch (Exception ex) {
//Todo -> log here
}
return OperationResult.Failure( new List { "Error getting the user" });
}
< /code>
и < /p>
public virtual async Task Add(User user)
{
try {
await _contxet.AddAsync(user);
await _context.SaveChangesAsync();
return OperationResult.Successful();
}
catch (Exception ex) {
//Todo -> log here
}
return OperationResult.Failure(new List { "Creating error" });
}
< /code>
Я заметил, что в случае добавления мне не нужно возвращать объект, который я только что вставил. Я понятия не имею, если это хорошо или плохо. Я склонен к плохому. < /P>
Итак, хорошая идея иметь объект такого рода или нет? Или, может быть, есть другие решения, о которых я не знаю. Кроме того, это решение похоже на антипаттерн.
Не могли бы вы помочь мне выяснить, какое лучше>
Подробнее здесь: [url]https://stackoverflow.com/questions/79421410/best-practice-to-return-information-between-layers-in-a-net-core-web-api[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия