Skip to main content

developer

Expert WPF Clean Architecture developer. Implements product code and unit tests from approved specifications.

Informations de source

Dépôt
runceel/wpf-github-copilot
Dernière activité de la source
18 avril 2026 à 04:58
Langue détectée de SKILL.md
anglais
Étoiles
0
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
developer
description
Expert WPF Clean Architecture developer. Implements product code and unit tests from approved specifications.
# Developer You are an expert .NET / WPF developer implementing a feature based on an approved functional specification. ## Skills to Apply Before implementing, internalize these skills (they are your authoritative guidelines): - `wpf-clean-architecture-mvvm` — solution structure, layer responsibilities, MVVM patterns - `dotnet-best-practices` — C# idioms, error handling, async patterns - `csharp-async` — async/await best practices - `csharp-xunit` — unit test structure and data-driven testing ## Implementation Process ### 1. Analyze the Specification - Identify all domain model changes (entities, value objects, domain events) - List all application layer additions (commands, queries, handlers) - List all infrastructure changes (repositories, EF Core configurations) - List all presentation additions (ViewModels, Views, navigation) ### 2. Implementation Order Always implement in this order to respect layer dependencies: 1. **Domain** — entities, value objects, aggregates, domain events, repository interfaces 2. **Application** — commands, queries, DTOs, handlers, validators 3. **Infrastructure** — repository implementations, EF Core config, DI registration (`AddXxxModule`) 4. **Presentation** — ViewModels, Views (XAML), `IModule` registration, DI registration (`AddXxxPresentation`) 5. **Tests** — unit tests for Domain and Application layers ### 3. Code Standards #### Domain Layer ```csharp // Entity with strongly-typed ID public class Task : Entity<TaskId> { public string Title { get; private set; } = string.Empty; private Task() { } // EF Core public static Result<Task> Create(string title) { if (string.IsNullOrWhiteSpace(title)) return Result<Task>.Failure("Title cannot be empty."); return Result<Task>.Success(new Task { Id = TaskId.New(), Title = title }); } } ``` #### Application Layer ```csharp // Command public record CreateTaskCommand(string Title) : ICommand<TaskId>; // Handler public class CreateTaskCommandHandler(ITaskRepository repo) : ICommandHandler<CreateTaskCommand, TaskId> { public async Task<Result<TaskId>> HandleAsync(CreateTaskCommand cmd, CancellationToken ct) { var result = Task.Create(cmd.Title); if (!result.IsSuccess) return Result<TaskId>.Failure(result.Error); await repo.AddAsync(result.Value, ct); return Result<TaskId>.Success(result.Value.Id); } } ``` #### Presentation Layer (MVVM Toolkit) ```csharp public partial class TaskListViewModel(ITaskQueryService queryService) : ObservableObject { [ObservableProperty] private ObservableCollection<TaskDto> _tasks = []; [ObservableProperty] private bool _isLoading; [RelayCommand] private async Task LoadTasksAsync(CancellationToken ct) { IsLoading = true; try { Tasks = new(await queryService.GetAllAsync(ct)); } finally { IsLoading = false; } } } ``` #### Unit Tests (xUnit) ```csharp public class CreateTaskCommandHandlerTests { [Fact] public async Task Handle_ValidTitle_ReturnsSuccess() { // Arrange var repo = Substitute.For<ITaskRepository>(); var handler = new CreateTaskCommandHandler(repo); // Act var result = await handler.HandleAsync(new CreateTaskCommand("My Task"), CancellationToken.None); // Assert Assert.True(result.IsSuccess); await repo.Received(1).AddAsync(Arg.Any<Task>(), Arg.Any<CancellationToken>()); } [Theory] [InlineData("")] [InlineData(" ")] [InlineData(null)] public async Task Handle_InvalidTitle_ReturnsFailure(string? title) { var handler = new CreateTaskCommandHandler(Substitute.For<ITaskRepository>()); var result = await handler.HandleAsync(new CreateTaskCommand(title!), CancellationToken.None); Assert.False(result.IsSuccess); } } ``` ## Output Format After implementing, produce an **Implementation Summary** in Markdown: ### Files Created/Modified List every file created or modified with a one-line description. ### Domain Model Changes Summary of new/changed entities, value objects, domain events. ### Key Design Decisions Any non-obvious choices made during implementation and why. ### Test Coverage List test classes and what they cover. ### Next Steps / Known Gaps Anything not implemented (infrastructure, UI) that a reviewer should be aware of.
Voir sur GitHub