Ceci est une continuation du texte sur l'architecture des systÚmes interprise. Le raisonnement est bon, mais à quoi ça sert sans application pratique. Je vais montrer mon cadre en action.
Tout a commencĂ© lorsque j'ai parlĂ© des problĂšmes de conception d'applications en .NET et que je me suis plaint de la vie difficile dans une entreprise sanglante. Ensuite, j'ai dĂ©crit la solution que j'ai trouvĂ©e et mise en Ćuvre moi-mĂȘme - Reinforced.Tecture. C'Ă©tait encore de la thĂ©orie, du raisonnement conceptuel, visionnaire et pleurnichard. Cette fois, il s'agit de 2020, mais HKT n'a pas Ă©tĂ© livrĂ© en C #.
Aujourd'hui, je vais démontrer mon approche en action en utilisant un projet simple comme exemple et montrer les avantages qu'il apporte: de la réduction de la quantité de code à l'automatisation des tests et une approche originale de la documentation. Comme le disait le vieux Torvalds: "Le chat ne vaut rien, montre-moi le code."
Donc, nous devons faire quelque chose de simple, mais en travaillant Ă Tecture. Puisque nous parlons d'une entreprise, je choisirai un exemple qui ressemble vaguement Ă une vraie entreprise.
Nous avons besoin:
- Essence simple. Les produits et les commandes viennent immédiatement à l'esprit. Qu'il y ait des produits;
- EF DbContext et base de données locale;
- Logique commerciale du jouet;
- Un projet web simple. Tous classés par rang, ASP.NET Core, WebAPI. Nous allons y mettre la logique.
EntraĂźnement
La structure du projet sera la suivante:
J'ai connecté EF.Core à l'assembly Data
, y mettre DbContext et coller le code pour les migrations. Parce que je veux laisser la logique sur .NET Standard et ne pas faire glisser EF avec moi.
DAL-, . â . , Tecture. .
Nous examinerons le comportement de Tecture en utilisant un exemple de travail avec des produits. Voici son essence, et la logique qui l'entoure sera simple et trĂšs stupide:
DbContext
- , - . â . EF , . . EF â ORM-. EF-.
MS SQL Express. â . EF.Core - â MySQL PostgreSQL. , , Tecture, . . .
, . Reinforced.Tecture Reinforced.Tecture.Aspects.Orm.
. , O/RM:
, Id. , . :
. Tecture end-user . web-. , Startup.cs
, ConfigureServices
. DI-, ASP.NET MVC. , AcmeDbContext
:
Tecture EF. web-. 2 : O/RM DirectSQL. DirectSQL , . , - . , - , dll- . . â â :
Tecture . . . AcmeDbContext
, LazyDisposable
( Lazy Disposable, ) . , EF . fluent-:
. " " . , , Tecture, , . separation of concerns: , , â â . , â , .
. , . , . , , , . â . , separation of concerns .
, : , , . glue-. , â , .
Tecture , . .
, ITecture
. .
-, Id. , . DTO. , , :
, ITecture
, , From<>
. , Id DTO-:
, , . Id DTO- . C# . , DTO- :
:
IQueryable
, All<>
, . . â , . â AutoMapper, expression-. â . , . , . , . , .
, - . . , Tecture . . , :
, . . ORM- â :
, Id . ORM â . â , Id â . ? : Add
IAddition<>
. , IAddition<Product>
. Key
. Id. . IPrimaryKey<>
. :
. - :
Postman Id .
-, Tecture. , , . â , .
. , .
. . 90% . , , â , .
, â . â . â .
.
. Tecture BeginTrace
EndTrace
. . :
Explain
. Tecture . return
:
! . , - . , , , â , , , . , , :
.Describe
.
: - . , , , . â , .
, , . , . , . , .
Tecture : . . -, . , - , . , . , , . Knowledge management!
IDescriptive
, , , . "User entity" "User Vasiliy Pupkin". , . , .
, - . Explain
â , , . , : , .
.
. . web- : Reinforced.Tecture.Testing
. â Roslyn. , . :
2 . GenerateData
GenerateValidation
. , :
: , C#-. , Tecture fake- . , , , -, Mockaroo. - â . , ?
. Reinforced.Tecture.Testing
. , 4 :
: -, - ( + ). . !
, . - -. , .
, ...
Unit-
, . QA : ", , !". , , , unit-.
CI/CD â . , , , . . . , Tecture . : - , . â . .
â , , - . , , , . â â , .
. . .
â , GenerateData
GenerateValidation
. NuGet . , .
, :
, :
, unit- 5 . , .
, ( ). - unit-. , , , - .
.
-
. , . , .
, Tecture. , . , â , . .
â , DirectSql, . , . .
Les paquets ont été publiés, les sources sont là , je suis en contact sur twitter, télégramme et sur github. Si vous voulez soudainement rejoindre les rangs des adopteurs précoces et prendre Tecture pour votre projet animalier - écrivez-moi, je vais essayer de vous aider.
Remerciement spĂ©cial fillpackart, arttomet leur communautĂ© We Are Doomed pour le support informationnel et l'Ă©dition. Regardez leur podcast , c'est gĂ©nial. Il y a mĂȘme un communiquĂ© avec moi .
Bonne chance!