ุฅุญูุง ุนุงูุฒูู ูุนู ู ูุธุงู ูุฎูู ุงูู Customer ููุฏุฑ ูุนู ู Order ููุฏูุน ุฃูููุงูู. ุงูููุงุฑุฏุฉ ููุฑูุฒ ุนูู ุชุตู ูู ุงูู Order ููุณู.
Entities
-
ุจู ุง ุงูู ุดุบุงู Code-firstุ ุงูู ูุฑูุถ ุชูุฑุฃ ุงูู SRS ุงูุฃูู ูุจุนุฏูู ุชุฑุณู ุงูู Class Diagram.
-
ูุจู ู ุง ุชูุชุจ ุฃู ุณุทุฑ Codeุ ูุงุฒู ุชุนู ู Design ููู Service ุจุชุงุนุชู ูุชุดูู ุงูู ุงูู Entities ุงููู ูุชุจูุง ู ูุฌูุฏุฉ ุนู ุทุฑูู Class Diagramุ ููู ุฒู ุงูู ERD ุจุณ ุจุชุนู ููุง ูู ุดุบุงู Code-first.
-
ูู ุจุชุดุชุบู ููุญุฏู ู ู ูู ุชุนู ู ุงููู ูุนุฌุจูุ ููู ูู ุญุฏ ููุดุชุบู ู ุนุงู ูุงุฒู ุชุดุชุบู ุนูู ุงูู Standards.
-
ุฃู Module ุจุชุจุฏุฃ ุชุดุชุบู ูููุ ุจุชุดูู ุงูู ูู ุงูู Entities, Poco Classes, Domain Models.
Order Aggregate
- ููุฑูุญ ุนูู ุจุฑูุฌูุช Core ููุนู
ู ูู ุงูู Entitles ูููุฏุฑ ููู
Order Aggregate
. - ุชุตู ูู ู ู ุด ุณูู (Complex)ุ ูุนุดุงู ุชุนู ูู Create ูุงุฒู ุชู ุดู ุนูู Patterns ุฒู ุงูู Abstract Factory Pattern and other patterns.
- ูู ูุชุนู ู Complex Object ูุงุฒู ุชู ุดู ุจุจู Pattern ุนุดุงู ูู ุญุงุฌุฉ ุชุจูุง ุชู ุงู ุฒู ุงูู Abstract Factory ุฃู ุงูู Builder Design Pattern.
Address
ูุนู ู Address ุงููู ูุดุญู ุนููู ุงูู Order:
public class Address
{
public string FirstName {get; set;}
public string LName {get; set;}
public string Street {get; set;}
public string City {get; set;}
public string Country {get; set;}
}
- ูุชูููู ู ุง ุงุญูุง ููุง ุนุงู ููู Address ูู ุงูู Identity ุจุณ ุฏุง ูุงู ุจุชุงุน ุงูู User ูุฏุง Table ูู ุงูู Database. ุงูู ุง ุฏุง ุจูู ุซู ุงูู Address ุจุชุงุน ุงูู Order.
- ู
ุด ูุฎููู ููุฑุซ ู
ู ุงูู
BaseEntity
ูุฃูู ู ุด ูุญููู ูู Table. - ุงูุนูุงูุฉ ุจูู ุงูู Address ูุงูู Order ูู One-to-one ููู ุงู ุงูุงุชููู ูุงุฒู ูุดุงุฑููุง ูุงูู ูุฑูุถ ุงูุฅุชููู ุจูุชุญุทูุง ู Table ูุงุญุฏ ุนุดุงู ูุฏุง ู ุด ูุนู ู ูุฏุง Table ูุนูู ู ู ุงูุขุฎุฑ ููุชุญุท ู ุน ุงูู Order.
- ุงูู Address ุฏุง ูููุฌู ู ู ุนููุงู ุงูู User ููุณู ุฃูู ู ุง ููุฌู ูุนู ู Order ูุฃุญุทู ู ุน ุงูู Order ุจุณ ุนูู ููุฆุฉ ุงูู Address ุฏุง ููุฏููู ุงู ูุงููุฉ ุงูู ููุฏุฑ ูุบูุฑ ููู. ูุนูู ุงูู Address ุจุชุงุน ุงูู User ูู ุงูู Default Address for Order.
- ูุนูู ุฃูุง ู ู ูู ุฃุจุนุช ุนูู ููุณ ุงูู Address ุจุชุงุน ุงูู User ุฃูุชุฑ ู ู Order ุจุณ ุงูู Address ุจุชุงุน ุงูู Order ูุงุฒู ูุจูุง ูุงุญุฏ ุจุณ ูู ู ูู ูุจูุง ูู ูู ุจุชุงุน ุงูู User.
Delivery method
ููุจูุง ุนุจุงุฑุฉ ุนู Table ููููุฑุซ ู
ู ุงูู BaseEntity
:
public class DeliveryMethod : BaseEntity
{
public string ShortName {get; set;}
public string Description {get; set;}
public decimal Cost {get; set;}
public string DeliveryTime {get; set;}
}
Order Status : Enum
public enum OrderStatus
{
[EnumMember(Value = "Pending")]
Pending, // label
[EnumMember(Value = "Payment Buy")]
PaymentReveived,
[EnumMember(Value = "Payment Faild")]
PaymentFailed
}
- ุงูุง ุนุงูุฒุฉ ูุชุฎุฒู ูู ุงูู Database ู ุด ุฑูู ุฃูุง ุนุงูุฒุฉ ูุชุฎุฒู ูููู ุฉ.
- ููุณุชุฎุฏู
Attribute ุงุณู
ู
EnumMember
ูุฏุง ููุฎุฒูู ูู ุงูู Database ูู String. ุงุชููู ูุง ูุจู ูุฏุง ุนู ุงูู Cs Enums.
Items
- ููุจูุง ุนุจุงุฑุฉ ุนู Table ููููุฑุซ ู
ู ุงูู
BaseEntity
. - ุงูุนูุงูุฉ ุจููู ูุจูู ุงูู Order ุงูู One-to-Many ู ู ูุงุญูุฉ ุงูู Order:
public class OrderItem : BaseEntity
{
public int ProductId {get; set;}
public string ProductName {get; set;}
public string PictureUrl {get; set;}
public decimal Price {get; set;}
public int Qunatity {get; set;}
}
- ููู ูุฑู ุจูู ุงูู
ProductId
ูุงูู Id ุงููู ูููุฑุซู ู ู ุงููBaseEntity
.- ุงูู
ProductId
ุฏุง ุจุชุงุน ุงูู Product ููุณู - ุงูู ุง ุงูุชุงูู ุนุจุงุฑุฉ ุนู ุงูู Primary key ุจุชุงุน ุงูุฌุฏูู.
- ุงูุง ู
ุซููุง ุฑูุญุช ุณุชุงุฑ ุจูุฑ ูุทูุจุช ุฃูุณ ู
ููุง ูููู Id ูู ูุฃูุง ุนู
ูุช Order ูุงูู Order ุจุชุงุนู ุฏุง ููู Item ูุงุญุฏ ุจุณ ูุฏุง Record in table
orderItems
ูุฃููุฏ ูู ุงูู Id ุจุชุงุนู ูู ู ุด ุจุชุงุน ุงูุญุงุฌุฉ ุงููู ุจุชุทูุจ.
- ุงูู
ู ู ุถู ู ููุงุนุฏ ุงูู Clean Code: ูู ุนูุฏู ู ุฌู ูุนุฉ ู ู ุงูู Properties ูููู ุจูู ุซููุง ููุณ ุงูุญุงุฌุฉ ููููุน ุชุนู ููู Encapsulation ูู Type ูุงุญุฏ ููู ุง ุชุนู ู ูุฏุง ููุจูุง ูููุง Meaningุ ุงุนู ู ูุฏุง.
ููุงูู
ุซุงู ุงููู ููู ุฏุง ุนูุฏูุง ุงูู ProductId
, ProductName
, PictureUrl
ูููู
ุจูุนุจุฑูุง ุนู ุงูู Product ุงููู ููุชุทูุจ.
ููู ู
ุฏุฎููุงุด ุงูู Price ูุฃู ุฏุง ู
ุด ุดุฑุท ูุจูุง ุณุนุฑ ุงูู Product ุงูู
ุง ุฏุง ุณุนุฑ ุงูู Item ูู ุงูู Order. ุจู
ุนูู ุงู ู
ู
ูู ูุญุตู ู
ุซููุง Discount ูููุฒู ุฃู ูุฏุง.
// In another file
public class ProductItemOrdered
{
public int ProductId {get; set;}
public string ProductName {get; set;}
public string PictureUrl {get; set;}
}
public class OrderItem : BaseEntity
{
public ProductItemOrdered Product {get; set;}
public decimal Price {get; set;}
public int Qunatity {get; set;}
}
- ุจุณ ุฏุง ู ุด ููุจูุง Table ูุฃู ุงูุนูุงูุฉ ุนุจุงุฑุฉ ุนู One-to-one.
- ูุฃูุง ูุนู ู Mapping ููุงุชููู ุฏูู ูู ุฌุฏูู ูุงุญุฏ ุฒู ู ุง ููุนู ู ูู ุงูู Order ูุงูู Address.
- ุงูุญูุงุฉ ูู ุงูู Database ู ุฎุชููุฉ ุนู ุงูู Code ูุฃู ู ุซููุง ูู ุงูู Database ููุง ููููุง ููุจููุง ูู ุฌุฏูู ูุงุญุฏ.
- ุงูู
ุง ูู ุงูููุฏ ูุฑูุญ ุฃุนู
ู Order ูููุจูุง ุฌูุงู Items ูุฌูุง ุงูู Items ููู
ProductItemOrdered
ูุฌูุงู ุงูู ุนููู ุงุช ุจุชุงุน ุงูู Order ุจูุง.
Order : Main
ููุจูุง ุนุจุงุฑุฉ ุนู Table ููููุฑุซ ู
ู ุงูู BaseEntity
:
public class Order : BaseEntity
{
public string BuyerEmail {get; set;}
public DateTimeOffset OrderDate {get; set;} = DateTimeOffset.UtcNow;
public OrderStatus Status {get; set;} = OrderStatus.Pending;
public Address ShippingAddress {get; set;}
// Not navigational Property
// public int DeliveryMethodId {get; set;} // FK
public DeliveryMethod DeliveryMethod {get; set;}
// Navigational Property [One]
public ICollection<OrderItem> Items {get; set;} = new HashSet<OrderItem>();
// Navigational Property [Many]
public decimal Subtotal {get; set;} // Cost without delivery
[NotMapped]
public decimal Total {get {return Subtotal + DeliveryMethod.Cost};}
//Or
public decimal Total => Subtotal + DeliveryMethod.Cost;
// Second Way
public decimal GetTotal()
=> Subtotal + DeliveryMethod.Cost;
// Derived Attribute
public string PymentIntentId {get; set;} = string.Empty;
}
- ููู
DatTimeOffset
ุ ุนุดุงู ู ูุธูุฑุด Local ููู ุฑุงุญ ุจูุฏ ุชุงููุฉ ุฏุง ู ูุนู ูุด ู ุดุงูู. - ุงูู Address ู ุด ููุจูุง Navigational Property ุนุดุงู ูู ุจูุจูุง ูู ููุณ ุงูู Table.
- ู ู ูู ุฃุณุชุฎุฏู ุงูู Delivery Method ุนุดุงู ููุตู ุงูุชุฑ ู ู Order ุจุณ ุงูู Order ุจูุณุชุฎุฏู ุนุดุงู ููุตูู Delivery Method ูุงุญุฏุฉ.
- ูุญุชุงุฌ ุฃุฑูุญ ูู ุงูู Delivery Method ุฃุนู ู Navigational Property(Many) ุจุณ ุงูุง ู ุด ู ุญุชุงุฌ ุฃุนู ููุง ุญุงูููุง ุนุดุงู ู ุด ูุณุชุฎุฏู ูุง ููู ููููู ุงู ูู One-to-One ููู ููุฑูุญ ูุงุฎุฏ ุงูู May(Delivery Method) ูุญุทูุง ูู ุงูู Must (Order). ูู ุนุฑู ู ูููุ ุนุฑู ุนู ุทุฑูู ุงู ุงูู Order ููู Delivery Method ูุฏุง ูุงุฒู ูุดุงุฑู ูู ุงูุนูุงูุฉ ุงูู ุง ุงููุงุญูุฉ ุงูุชุงููุฉ ู ููุด ูุฏุง ุนุงุฏู ู ูุดุงุฑูุด ุงู ูุฏุง. ููุญุชุงุฌ ุฃุนู ู ุงูู Foreign Key.
- ูู ุฌูุช ุฃุนู
ู Order ูุญุทูุช ุงูู
DeliveyMethodId
ุจู 1 ูุฌู ู ุซููุง ุจูุจ ูุนู ู ุงูุฑุฏุฑ ูุญุท ุงููDeliveyMethodId
ุจู 1ุ ุญุฏ ููุนุชุฑุถุ ุงููุฏ ูุง ูุจูุง ุฒู ู ุง ูู ูุฏุง ุชุนุชุจุฑ one-to-many ู ุด one-to-one. - ูู ุงูุนูุงูุงุช ุฃุตููุง ุจูุชุนู ููุง Map ูู One-to-many ูุฏุง ุงูุทุจูุนู ููู ุฅูู ุง ูู ุนุงูุฒูุง ุชุจูุง one-to-one ูุนููุง ูุงุฒู ุฃุญุท Constraint ููููู Unique ุจุงูู Fluent API.
- ุจุณ ุฃูุง ู ุด ู ุญุชุงุฌ ุฃุนู ู Property ุจุชู ุซู ุงูู Foreign Keyุ ููู ุจุฑุงุญุชู. ูุฃูู ู ู ูู ุฃุณุชุฎุฏู ุงูู Navigational Property.
- ุงุฒุงู ุฃุนู
ู Set ููู Foreign Keyุ ุนู ุทุฑูู ุงูู Navigational Property ุจุดุฑุท ุฅู ุงูู
DeleviryMethod
ุชููู ูู ุงููู ุฌุงูุฉ ู ู ุงูู DB ูุงูู EF Core ุนุงู ููุง Tracking.
ุงูู Derived attribute ูู ุทุฑููุชูู:
- ุงู
ุง ุฅูู ุฃุนู
ูู Readonly ุจูุงุฎุฏ get ุจุณ ูุงุนู
ู ุงูู get ุฏู ุงูู
ุนุงุฏูุฉ ุจุชุงุนุชู ูุงุนู
ููุง
NotMapped
. - ุงูุทุฑููุฉ ุงูุชุงููุฉ ุฃุนู ู Function ุจุชุนู ู Get ุจุณ (ุงูู ูุถูุฉ).
ูู ุญุฏ ูุงูู ุฅู ุงูู ูุฑูุถ ุงูู Entity ูุจูุง Poco class ูู ุด ุจูุจูุง ูููุง ุฃู Functionality ุฃู ุฃู Behaviour ุชูููู ุฏู ู ุด Functionality ุฏู ุนุจุงุฑุฉ ุนู Derived Attribute.
- ุงูู Property ุงูุฃุฎูุฑุฉ ุฏู ุจุชุงุน ุงูู Intent ุนุดุงู ูุณุชุฎุฏู ูุง ูู ุงูุณูุดู ุงูุฌุงูุฉ.
- ุนุดุงู ู ุถุทุฑุด ุฃุนู ู Migration ุชุงูู ููุนู ููุง ุจุณ ูุฏุง ูุถุทุฑ ุฃุฎุฒููุง ุจุฑุถู ูุฏู ู ุดููุฉ ููุถุทุฑ ุฃููู ุงููุง ุจุชูุจู Null ุจุณ ุจุฑุถู ูุถุทุฑ ุฃุบูุฑูุง ูุงููู ุงููุง ู ุจุชูุจูุด Null ุจุนุฏ ูุฏุง ููุนู ู Migration ููุงุฒู ุฃุฏูููุง Default value ููู ุนุจุงุฑุฉ ุนู Empty string ูุงูุณูุดู ุงูุฌุงูุฉ ุฃุดูููุง.
Constructor
- ู ุญุชุงุฌ ุฃุนู ู Constructors ููู ุงูู Classes ุฏู ูุชููู ุจุชุงุฎุฏ ููู ููู ุญุงุฌุฉ ูุจุญุทูุง ูููุง. ูุฃูุง ุจูู ุนูู ุงูู Class ูุงุนู ู Generate constructor ููุญุฏุฏ ููู ููุนู ูู.
- ุจุณ ุงูู ุดููุฉ ุฅู ุงูู EF Core ุจูุญุชุงุฌ Ctor ูุงุถู ููู ุงูู Tables ุงู ุงูู Entities ุงููู ุฌูุง Tables ุนุดุงู ููุฏุฑ ูุณุชุฎุฏู ู. ูุฃูุง ู ุถุทุฑ ุฅูู ุงุนู ูู ุงูุง ูุฃูู ุจุนุฏ ู ุง ุนู ูุช ูุงุญุฏ ู ุด ูุงุถู ุงููู ูุงู ูุงุถู ุงุชู ุณุญ.
ุจุณ ุฎุฏ ุจุงูู ู
ู ุงูุญุงุฌุงุช ุงูุซุงุจุชุฉ ู
ุชุญุทูุง ูู ุงูู Ctor. ู
ุซููุง ุฏุง ููู Order.