Ваше приложение Todo слишком сложное или недостаточно сложное

1 min


Чтение кода это веселоЯ уже писал в блоге про ASP.NET Architect Дэвида Фаулера скрытые драгоценные камни в ASP.NET, Его GitHub стоит того потому что он всегда исследует и думает, и он делает это на публике. я люблю чтение чужого исходного кода,

Он работал на местном оркестраторе называется Micronetes об этом стоит прочитать, но для этого поста в блоге я хочу сосредоточиться на своемTodos“хранилище.

Создание списка Todo – это форма Hello World в Интернете, похожая на создание блога или простого веб-сайта. Все знают, как должно выглядеть и работать приложение Todo, поэтому вы можете просто сосредоточиться на своих инструментах, а не на требованиях. Вы можете почувствовать, что приложение Todo «недостаточно сложно» или не является хорошим примером приложения. Это хорошо, но стоит изучить и прочитать разные способы, как можно сделать одно и то же.

Хранилище Дэвида https://github.com/davidfowl/Todos Примечательно, потому что это не одно приложение Todo. На момент написания этой статьи было 8 приложений, каждое из которых имеет свою причину существования.

Как выглядит основное приложение? Что если вы добавите Auth? Что если вы добавите Dependency Injection? А как насчет контроллеров? Вы поняли идею.

Некоторые языки и платформы (* ahem * enterprise) имеют репутацию слишком сложных, слишком многоуровневых, слишком много проектов. Другие могут получить противоположную репутацию – это игрушка, она никогда не будет масштабироваться (по размеру, трафику, размеру команды, что угодно).

Дело в том, что не все это молоток, а не все винт. Вы можете подумать, что это полицейский, но ответы всегда “Это зависит”. Чем больше у вас опыта в программном обеспечении, тем больше ошибок вы совершаете и чем больше систем внедряете в производство, тем больше вы поймете, что – ждите этого – По-разному, Не согласен, если хотите, но один размер подходит не всем.

Некоторые интересные вещи о коде Дэвида Todo

Все это говорит о том, что есть кое-что интересное «до и после», если вы посмотрите на код более раннего идеоматического C # и то, что позволяют более новые API и языковые функции. Например, если мы предположим, что некоторые расширения и новые API добавлены для ясности, вот POST

static async Task PostAsync(HttpContext context)
{
var todo = await context.Request.ReadJsonAsync(_options);

using var db = new TodoDbContext();
await db.Todos.AddAsync(todo);
await db.SaveChangesAsync();

context.Response.StatusCode = StatusCodes.Status204NoContent;
}

и ПОЛУЧИТЬ

static async Task GetAllAsync(HttpContext context)
{
using var db = new TodoDbContext();
var todos = await db.Todos.ToListAsync();

await context.Response.WriteJsonAsync(todos, _options);
}

Я лично так думаю как это это слишком сложно. Я ненавижу этот параметр.

static async Task GetAsync(HttpContext context)
{
if (!context.Request.RouteValues.TryGet("id", out long id))
{
context.Response.StatusCode = StatusCodes.Status400BadRequest;
return;
}

using var db = new TodoDbContext();
var todo = await db.Todos.FindAsync(id);
if (todo == null)
{
context.Response.StatusCode = StatusCodes.Status404NotFound;
return;
}

await context.Response.WriteJsonAsync(todo);
}

Это выдуманный код от меня, который не работает. Это даже немного слишком много.

static async Task GetAsync(HttpContext context)
{
if (!RouteValues.Exist("id")) return Http.400;

using var db = new TodoDbContext();
var todo = await db.Todos.FindAsync(RouteValues["id"] as int);
if (todo == null) return Http.404

await Json(todo);
}

Все это полезные упражнения, которые интересно исследовать. Это также поднимает некоторые сложные вопросы:

  • В чем разница между кратким и ясным, а не темным и недоступным?
  • Насколько важен закон Деметры?
  • Некоторые проблемы лучше решаются изменениями языка или изменениями основных библиотек?
  • Сколько вещей следует / можно поместить в методы расширения?
    • И когда эти базовые сценарии ломаются, вы попадаете в Func >>>> Адский пейзаж?

Вам нравится читать такой код, как и мне, дорогой читатель? Я думаю, что это отличный инструмент обучения. Я мог бы провести целый день, чтобы облегчить беседу вокруг этого кода https://github.com/davidfowl/Todos

Наслаждайтесь!


0 Comments

Ваш адрес email не будет опубликован. Обязательные поля помечены *