tgoop.com/csharp_1001_notes/762
Last Update:
π« EF Core + Β«ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΒ» = Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ»ΠΎΠΉ
Π§Π°ΡΡΠΎ ΡΠΎΠ²Π΅ΡΡΡΡ Π·Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ EF Core Π² Repository Pattern.
ΠΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅:
- DbContext
ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Repository ΠΈ Unit of Work
- Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² Β«ΠΌΠΎΠ½ΡΡΡΠΎΠ²Β» Ρ Π΄Π΅ΡΡΡΠΊΠ°ΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
- ΠΠ°ΠΆΠ΄ΡΠΉ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠ»ΡΡΡ = Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠΏΠΈΠΏΠ°ΡΡΠ°
Π ΠΈΡΠΎΠ³Π΅ β Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π½Π°Π΄ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠ΅ΠΉ ΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ.
---
β
Π§ΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ? Specification Pattern
Specification = ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΠ»ΠΈ ΡΠΈΠ»ΡΡΡ.
ΠΡ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΠ΅ΡΠ΅ ΠΈΡ
ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π±Π΅Π· ΡΠ°Π·Π΄ΡΡΡΡ
ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π².
ΠΠ»ΡΡΡ:
- π§© ΠΡΠΎΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»
- π Π―ΡΠ½ΡΠΉ ΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ ΠΊΠΎΠ΄
- β»οΈ ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ
- π§ͺ ΠΡΠ³ΠΊΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
π ΠΡΠΈΠΌΠ΅Ρ
// ΠΠΈΠ·Π½Π΅Ρ-ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Ρ Π·Π°ΠΊΠ°Π·Π°ΠΌΠΈ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 30 Π΄Π½Π΅ΠΉ
public sealed class ActiveCustomersSpec : Specification<Customer>
{
public ActiveCustomersSpec(DateTime since)
{
Criteria = c => c.IsActive && c.Orders.Any(o => o.CreatedAt >= since);
AddInclude(c => c.Orders);
}
}
// ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
var spec = new ActiveCustomersSpec(DateTime.UtcNow.AddDays(-30));
var customers = await db.Set<Customer>().Apply(spec).ToListAsync();
π‘ ΠΡΠΎΠ³:
EF Core = ΡΠΆΠ΅ Repository + UoW
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΠΎΠ²Π΅ΡΡ EF Core β Π»ΠΈΡΠ½ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ
Specification Pattern β Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΈ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ Π±Π΅Π· Β«ΠΌΠ΅ΡΠΎΠ΄-ΠΌΠΎΠ½ΡΡΡΠΎΠ²Β»
BY C# 1001 notes

Share with your friend now:
tgoop.com/csharp_1001_notes/762