DOTNET MEETUP JUNE 2025 @AGODA

สำหรับงานวันนี้จัดที่ Agoda@CTW โดยหัวข้อที่จดไว้มี 2 เรื่อง ดังนี้

From Tedious to Automated: Let AI Agents Clean Up Your .NET Code Reviews

Speaker Aram Pokmanee

- Why AI Automated Code Reviews

Speaker พบปัญหา Context Switching โดนขัดจังหวะไปทำอย่างอื่น เช่น Meeting หรือ Code Feature ไปทำอย่างอย่าง เช่น อยู่ Merge Request ที่ส่งไปมี Comment เด้งมา 30 อัน ซึ่งมันมีผลกับ Productivity เพราะ

  • Lost Focus - ประมาณ 20-45 นาทีหลุดไป ตอนกลับมาทำงานเติม ต้องมาจูนกันก่อน
  • Reduce Productivity
  • Exceeding Cognitive Capacity - พอสมองเราทำงานเยอะๆ มันส่งผลกับ Code เข้า เช่น Bug เพิ่มขึ้น หรือ เขียน Case ไม่ครบ
- AI in Coding

สำหรับอันนี้ยุคแรก 201x - 2020 จะเป็นการ suggest syntax ถัดมาหน่อยหลัง มีตัว Auto Complete หลังจาก ChatGPT เปิดตัวมา 2022 จะมีตัว GitHub Copilot

ช่วง 2023-2024 จะเป็นยุค IDE + AI อย่าง Cursor + Windsurf หรือแม่แต่ App อื่นๆอย่าง Figma มี AI จนมาถึงตอนนี้ยุค Agentic Coding

- Solution

จากเดิมที่เราต้องมา Manual จัดการ Comment ที่ละอัน เรายกให้ AI มันจัดการไป ตามรูปเลย

โดยมีวิธีการ 2 แบบ

📌 Old way เอา Code จาก Merge Request Copy Paste + Prompt ไปถาม AI ผ่าน Chat

📌 AI Agent IDE + MCP

ส่วนประกอบแต่ละอัน

จากนั้นเป็นการเล่าประสบการณ์แล้วว่าลองใช้เป็นยังไง แยกเป็น 2 กลุ่ม

Prompt: Please fixed this MR <LINK TO MERGE REQUEST>

  • Claude Code - command line ไว และ visualize ลำบาก
  • กลุ่ม IDE Cursor / VS Code + Copilot / Windsurf ใช้งานได้ Model หลากหลาย และ Visualize ได้ดี แต่ตอนใช้งานต้องเลือกส่วนราคา แต่ละตัวจะจ่ายกัน แบบเหมาๆ หรือ ได้ xxx request / เดือน ถ้าเกินจะเป็น pay as you go

นอกจากนี้ ถ้าเรามี Coding Style / Coding Standard ต้องสร้าง Context File บอก AI ให้มันเอาข้อมูลส่วนนี้ไปประกอบการ Review ด้วย https://github.com/colthreepv/llm-context

What's New in .NET 10 - Why .NET 10 is a game changer

Speaker Jose Barbosa

สำหรับ dotnet 10 ที่จะเปิดตัว Long Term Support (LTS) ในปลายเดือน NOV 25 นี้มีอะไรเด่นๆบ้าง

- runtime

📌 Array interface method devirtualization - เมื่อก่อนตอนเราเขียน foreach เวลา Loop จริงตัว JIT มันทำ Virtual Call แอบไปทำ for แบบเดิมอีกที มันต้องมีการ Check Bound ค่าขอบเสมอ ตอนนี้ตัว JIT ทำได้ในตัวแล้ว เลยเร็วขึ้น

static int Sum(int[] array)
{
    int sum = 0;
    for (int i = 0; i < array.Length; i++)
    {
        sum += array[i];
    }

    return sum;
}

ก่อน net10 code แบบนี้จะ perf ดีสุด

static int Sum(int[] array)
{
    int sum = 0;
    IEnumerable<int> temp = array;
    foreach (var num in temp)
    {
        sum += num;
    }
    return sum;
}

ก่อน net10 code แบบนี้จะทำให้ Virtual Call แอบไปทำ for แบบ แต่ใน net10 ตัว JIT ลดขั้นตอน แล้วทำเหมือนกับ Code for ปกติได้แล้ว เลย Performace ดีขึ้น

📌 Stack Allocation of Arrays of Value Types

  • NET9 ตัว JIT สามารถจองพื้นที่ stack ลดการใช้ GC Pointer สำหรับสร้าง object ทำให้ทำงานได้เร็ว
  • NET10 เพิ่มความสามารถ stack allocation of small, fixed-size arrays of value types 
- libraries

📌 .NET 10 libraries Enchangement มีหลายตัวตามรูปเลยทั้งในส่วน Certificate / Data / Compression / JSON เป็นต้น

- SDK

📌 Removal of unnescessary-framework provide package reference เอาข้อที่ไม่จำเป็นออก พบ Lib ลดลง Attack Surface ลดลงเพิ่ม Security และ Performance

📌 Pruning of Framework-Provided Package References ตัว nuget lib อันไหนไม่ได้ใช้งานจริง ตอน Run NuGet Audit มันจะเอาออกไปจาก Code Base เราเลย มันจะช่วยลดเวลา Build / Disk ที่ใข้ / เวลาในการดูแล เช่น ต้องมาไล่แก้ Security เป็นต้น

- ASP.NET Core

📌 OpenAPI3.1 Support
Key Changes:
- Nullable properties no longer use nullable: true. Instead, they now use a type keyword with an array that includes null.
- Removal of OpenApiAny, which is now replaced by JsonNode.
- Serving OpenAPI in YAML Format

📌 The [ProducesResponseType] attribute เพิ่ม description เอาไว้ใส่คำอธิบาย API ให้ชัดเจน

[HttpGet(Name = "GetWeatherForecast")]
[ProducesResponseType<IEnumerable<WeatherForecast>>(StatusCodes.Status200OK, 
    Description = "Optional Field for add more detail for you api")]
public IEnumerable<WeatherForecast> Get()
- Blazor

📌 QuickGrid RowClass Parameter
📌 Blazor Script Optimization - มองถูกมองเป็น embedded resources ใน ASP.NET มันเลยทำพวก Compression / Caching ได้ด้วย

- EF Core 10 (EF10)

📌 query translation Key Improvements

  • Translation support for DateOnly.ToDateTime(TimeOnly)
  • Optimized handling of consecutive LIMIT operations
  • Performance improvements for Count operations on ICollection<T>

📌 ExecuteUpdateAsync now supports regular lambda expressions

- C# 14

📌 New field Keyword

  • Before - code เยอะ
private string _msg;
public string Message
{
    get => _msg;
    set => _msg = value ?? throw new ArgumentNullException(nameof(value));
}
  • After
public string Message
{
    get;
    set => field = value ?? throw new ArgumentNullException(nameof(value));
}

📌 Implicit Conversions for Span<T> and ReadOnlySpan<T>
📌 Unbound Generic Types in nameof

สำหรับเรื่อง dotnet10 ระหว่างเขียนไปเจอ blog ที่สรุปดีเลย ขอแปะไว้ด้วยครับ

นอกจากนี้คุณ Jose Barbosa นำเสนอ project MapCrud ช่วยการทำ API ง่ายครบทุก Verb ครับ + Doc (OpenAPI Format) แบบ FastAPI

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.