Des applications .NET qui suivent vos règles de gestion et évoluent avec votre activité

API, logique métier et migrations en ASP.NET Core. Code testé, relu et documenté, qui vous appartient.

app-facturationC# · .NET

Requête : POST/factures/148/emettre

Réponse : 201 Created38 ms

  1. API

    Vérifie la requête

    ASP.NET Core

  2. Application

    Charge la facture 148

    IssueInvoice

  3. Domaine

    Applique les règles de facturation

    invoice.Issue()

  4. Base de données

    Enregistre la facture émise

    SQL Server ou PostgreSQL

Exemple : le trajet d’une requête dans une application .NET organisée en couches.

Ce que vous obtenez

Ce que la prestation vous apporte, et la façon dont c’est construit.

  • Vos applications, vos partenaires et vos outils connectés à vos données

    Pour votre équipe technique : API REST documentées en ASP.NET Core

  • Vos règles de gestion écrites à un seul endroit, faciles à faire évoluer

    Pour votre équipe technique : Logique métier isolée dans une couche dédiée, indépendante de la base de données et de l’interface

  • Des données bien structurées, dont chaque évolution est tracée

    Pour votre équipe technique : Entity Framework sur SQL Server ou PostgreSQL, schéma versionné par des migrations

  • Une architecture à la taille de votre projet

    Pour votre équipe technique : Microservices, CQRS ou DDD quand le projet le justifie, pas par principe

  • Chaque modification vérifiée avant de vous être livrée

    Pour votre équipe technique : Tests unitaires et d’intégration relancés à chaque modification, avant toute fusion

Passer de .NET Framework à .NET 10

Le même point d’entrée, avant et après la migration. Ce que fait l’application ne change pas, la façon de l’écrire et de l’héberger, si.

Avant · .NET 4.8Exemple · Code

InvoicesController.cs

public class InvoicesController : ApiController{    [HttpPost, Route("api/factures/{id:int}/emettre")]    public IHttpActionResult Issue(int id)    {        var settings = ConfigurationManager.AppSettings;        var paymentTermDays = int.Parse(settings["PaymentTermDays"]);        var connectionString = ConfigurationManager            .ConnectionStrings["Billing"].ConnectionString;        using (var connection = new SqlConnection(connectionString))        using (var command = new SqlCommand(            "UPDATE Invoices SET Status = 'Issued', " +            "DueOn = DATEADD(day, @term, GETDATE()) WHERE Id = @id",            connection))        {            command.Parameters.AddWithValue("@id", id);            command.Parameters.AddWithValue("@term", paymentTermDays);            connection.Open();            if (command.ExecuteNonQuery() == 0) return NotFound();        }        return Created($"api/factures/{id}", new { Id = id });    }}

web.config

<connectionStrings>  <add name="Billing"    connectionString="Server=db01;Database=Billing;Trusted_Connection=True" /></connectionStrings><appSettings>  <add key="PaymentTermDays" value="30" /></appSettings>
Exemple : Un contrôleur Web API 2 typique d’une application .NET Framework : accès aux données synchrone, configuration lue dans web.config.
Après · .NET 10Exemple · Code

InvoicesController.cs

[ApiController][Route("api/factures")]public class InvoicesController(    BillingDbContext db, IOptions<BillingOptions> options) : ControllerBase{    [HttpPost("{id:int}/emettre")]    public async Task<IActionResult> Issue(int id, CancellationToken ct)    {        var invoice = await db.Invoices.FindAsync([id], ct);        if (invoice is null) return NotFound();        invoice.Issue(options.Value.PaymentTermDays);        await db.SaveChangesAsync(ct);        return Created($"/api/factures/{id}", new { invoice.Id });    }}

Program.cs

builder.Services.AddDbContext<BillingDbContext>(options => options    .UseSqlServer(builder.Configuration.GetConnectionString("Billing")));builder.Services.Configure<BillingOptions>(    builder.Configuration.GetSection("Billing"));

appsettings.json

{  "ConnectionStrings": {    "Billing": "Server=db01;Database=Billing;User Id=billing_api"  },  "Billing": { "PaymentTermDays": 30 }}
Exemple : Le même point d’entrée en ASP.NET Core, écrit pour cette page : ce n’est pas un extrait de projet client.
  • Hébergement Linux ou conteneur

    .NET 10 tourne sur Linux et dans des conteneurs Docker. Plus besoin d’un serveur Windows avec IIS pour héberger l’application.

  • Support Microsoft actif

    Une version de .NET sort chaque année et chaque version à support long (LTS) est maintenue trois ans. .NET Framework 4.8 ne reçoit plus que des correctifs.

  • Performances

    Le code asynchrone libère le serveur pendant qu’il attend la base de données, et chaque version de .NET apporte ses propres optimisations.

Stack technique

  • .NET
  • C#
  • SQL Server
  • PostgreSQL
  • Azure
  • Docker

ASP.NET Core · Entity Framework · SOLID · Clean architecture · CQRS / DDD · Microservices

Questions fréquentes

Prix, reprise d’une application existante, propriété du code et travail avec votre équipe.

Combien coûte un développement .NET sur-mesure ?

Entre 4 800 et 24 000 € HT selon le périmètre. Comptez de 4 800 à 9 600 € HT pour une API qui complète une application existante, de 8 000 à 18 000 € HT pour migrer une application .NET Framework selon sa taille, et de 12 000 à 24 000 € HT pour le backend complet d’un outil métier. Le devis précis suit la première analyse, gratuite.

Pouvez-vous reprendre une application .NET existante, même ancienne ?

Oui, y compris une application .NET Framework. Nous lisons d’abord le code et ses dépendances pour faire un état des lieux, puis nous proposons de la faire évoluer par étapes ou de la migrer vers .NET 10. Vous décidez sur la base de ce constat.

Le code m’appartient-il ?

Oui. Le code vous appartient et il est documenté, sans boîte noire. Vous récupérez le dépôt complet : code, migrations de base de données et documentation.

Comment démarre un projet ?

Par un message : décrivez votre besoin dans le formulaire ou par e-mail. Nous répondons sous 24 h ouvrées avec une première analyse gratuite, puis nous fixons un échange pour cadrer le périmètre.

Travaillez-vous avec l’équipe technique en place ?

Oui. Le code arrive par pull request, relu et testé, dans les conventions de votre équipe. Vos développeurs peuvent le relire et le commenter comme le reste de leur code avant de le fusionner.

Comment nous travaillons

Le même chemin pour chaque livraison, avec une relecture humaine avant toute mise en production.

Voir notre méthode et nos engagements
  1. 01Cadrage
  2. 02Réalisation assistée
  3. 03Revue humaine
  4. 04Tests et recette
  5. 05Production supervisée

Parlons de votre projet

Décrivez votre besoin en quelques lignes.

Vos informations servent uniquement à répondre à votre demande